Share:

Que signifie sans serveur dans Azure ? Suivez les premiers pas de Giuseppe Battista avec Azure Functions et découvrez le chemin le plus court du code au Cloud.

Chez Cloudreach, nous aimons sortir de notre zone de confort pour explorer différentes technologies passionnantes.

Je suis un développeur de logiciels chevronné qui se passionne pour tout ce qui est sans serveur. Ces dernières années, je me suis concentré sur AWS et Node.js, mais dernièrement, j’ai décidé d’explorer l’interprétation du sans serveur dans l’univers Microsoft.

Dans cet article, je souhaite passer en revue ma première expérience avec Azure Functions. Je vais d’abord créer une machine de développement Windows avec Visual Studio dans Azure, puis utiliser l’IDE pour construire et, enfin, publier ma première Azure Function. Cela signifie que vous serez en mesure de mener votre propre évaluation de la migration des applications Azure en suivant les instructions.

Configuration

L’une des choses que j’aime dans le Cloud, c’est la facilité et la fluidité avec lesquelles on peut mener des expériences. Dans ce contexte, j’ai décidé que je ne voulais pas installer et exécuter un IDE sur mon poste de travail, mais plutôt utiliser une machine virtuelle préconfigurée dans le Cloud et m’y connecter via Remote Desktop. Cette méthode présente de nombreux avantages. Je peux avoir un environnement de développement reproductible et isolé, je ne dois pas passer du temps à installer et à configurer mon poste de travail et je peux facilement accéder à plus de puissance de calcul, si j’en ai besoin.

IDE

Je vais utiliser Microsoft Visual Studio 2019 Community Edition sur Windows Server 2016. Voici comment le configurer dans Azure :

  • Connectez-vous au portail Azure avec les détails de votre abonnement. Si vous n’avez pas d’abonnement, suivez ces instructions pour commencer à utiliser Azure gratuitement.
  • Dans la barre de recherche principale, tapez « machines virtuelles » puis appuyez sur le premier résultat.

Premiers pas avec Azure Functions

Appuyez sur « + Ajouter » pour créer une nouvelle machine virtuelle. Remplissez le formulaire comme illustré dans les figures suivantes :

Premiers pas avec Azure Functions

Choisissez un « Groupe de ressources » dans la liste déroulante ou créez-en un nouveau en cliquant sur « Créer nouveau ».

Premiers pas avec Azure Functions

La bonne « Image » peut être trouvée en appuyant sur « Parcourir toutes les images publiques et privées » et en recherchant Visual Studio 2019, comme le montre la figure suivante.

Premiers pas avec Azure Functions

Configurez un utilisateur administrateur et notez votre nom d’utilisateur ainsi que votre mot de passe.

Premiers pas avec Azure Functions

Laissez les valeurs par défaut pour toutes les autres options de cette page. Appuyez sur « Réviser + créer ».

Vérifiez la configuration, puis appuyez sur « Créer ».

Si le déploiement est réussi, le message suivant devrait s’afficher :

Premiers pas avec Azure Functions

Activation de Remote Desktop

Avant de vous lancer dans le codage, suivez les étapes suivantes pour activer la connectivité RDP (Remote Desktop Protocol) entre votre poste de travail et votre machine de développement à distance.

  • Connectez-vous au portail Azure, recherchez des « machines virtuelles » dans la barre de recherche principale
  • Appuyez sur « azure-ide »
  • Dans le menu de gauche, recherchez Mise en réseau et inspectez les règles de mise en réseau.

Premiers pas avec Azure Functions

  • Prenez note de « NIC Public IP » afin de vous connecter à votre Remote Desktop plus tard. Il s’agit de l’adresse IP qui a été attribuée à votre machine dans le Cloud.
  • Appuyez sur « Ajouter entrant » et remplissez le formulaire comme dans la figure suivante. Obtenez votre adresse IP ici. L’ajout de cette règle permet à votre machine de développement distante d’accepter le trafic de votre adresse IP uniquement via le port 3389.

Premiers pas avec Azure Functions

Connectez-vous à votre machine de développement à distance

Vous pouvez vous connecter à votre ordinateur de développement distant à l’aide d’un Remote Desktop Client. Suivez ces instructions pour commencer sur Windows, MacOS et Linux.

Ouvrez votre Remote Desktop Client (par exemple, j’utilise Microsoft Remote Desktop), entrez votre « ADRESSE IP publique de carte réseau » et vos informations d’identification d’administrateur. Dans quelques secondes, vous devriez pouvoir voir Windows démarrer et enfin votre Bureau.

Construire la fonction

Une fois connecté(e) à votre ordinateur de développement à distance, ouvrez Visual Studio en cliquant sur l’icône sur votre bureau et sélectionnez « Créer un nouveau projet ».

Visual Studio 2019

Dans la liste des projets disponibles, sélectionnez « Azure Functions ». Appuyez sur « Suivant ».

Configuration de projet Visual Studio 2019

Nommez votre fonction comme indiqué sur la figure et sélectionnez un chemin sur votre disque pour héberger le code.

Configuration de projet Visual Studio 2019

Sélectionnez « Http trigger », définissez Storage Emulator comme votre « Storage Account » et enfin sélectionnez « Anonymous » comme niveau d’autorisation.

Créer une application Azure Functions

Tester la fonction localement

Visual Studio génère un projet à partir d’un modèle avec du code C# standard pour votre fonction. Pour créer et tester la fonction, appuyez sur le bouton en surbrillance dans la figure ci-dessous.

Test de la fonction Cloud

Visual Studio compilera et exécutera votre fonction localement. Prenez note de l’URL de Function1, mise en évidence dans la figure suivante.

Publier la fonction sur Azure

Assurez-vous que votre fonction est opérationnelle en ouvrant une fenêtre PowerShell : cliquez sur Démarrer et recherchez PowerShell comme illustré dans la figure suivante.

Windows PowerShell

Exécutez la commande suivante pour invoquer la fonction en cours d’exécution localement.

curl https://localhost:7071/api/Function1?name=azure

Veuillez noter que votre URL peut être différente.

Publier la fonction sur Azure

Dans la console Visual Studio, vous devriez voir les journaux de votre demande. Assurez-vous que dans les deux journaux, vous recevez un statut de 200.

Publier la fonction sur Azure

Publier la fonction sur Azure

Prêt à l’emploi, Visual Studio facilite la publication de votre fonction sur Azure. Dans le menu Créer, sélectionnez « Publier AzureSampleFunction », comme illustré dans l’image.

Tester la fonction sur le Cloud

Sélectionnez « Application Azure Function » comme cible, cliquez sur « Créer nouveau » et assurez-vous que l’option « Exécuter à partir du package » est cochée. Cliquez sur « Publier ».

Visual Studio

Vous devez vous connecter à votre compte Azure : cliquez sur « Se connecter » et entrez les informations d’identification de votre compte.

 

Visual Studio

Une fois la connexion réussie, entrez un nom pour votre fonction, sélectionnez votre « Abonnement Azure », choisissez ou créez un nouveau « Groupe de ressources »”, « Plan d’hébergement » et « Compartiment de stockage Azure ». Cliquez sur « Créer ».

Visual Studio

Visual Studio empaquetera et publiera votre code dans Azure Functions. Une fois le processus terminé, prenez note de l’URL du site. Il s’agit de l’URL sur laquelle votre fonction a été déployée.

Visual Studio

Tester la fonction sur le Cloud

Ouvrez une invitation PowerShell et lancez la commande suivante pour tester votre fonction déployée dans le Cloud.

curl https://<SITE-URL>/api/Function1?name=azure

Vous devriez recevoir une réponse similaire à la suivante.

Visual Studio

Si vous obtenez une réponse OK 200, votre fonction est opérationnelle dans Azure !

Le Code

Essayons de donner un sens au code : les premières lignes concernent l’importation de dépendances.

 

Utilisation du système ;

utilisation de System.IO ;

utilisation de System.Threading.Tasks ;

utilisation de Microsoft.AspNetCore.Mvc ;

utilisation de Microsoft.Azure.WebJobs ;

utilisation de Microsoft.Azure.WebJobs.Extensions.Http ;

utilisation de Microsoft.AspNetCore.Http ;

utilisation de Microsoft.Extensions.Logging ;

utilisation de Newtonsoft.Json ;


Chaque fois que votre fonction est invoquée (dans ce cas, par une requête HTTP), Azure exécute la méthode statique publique Run de la classe statique publique Function1, définie dans l’espace de noms AzureSampleFunction. Comme indiqué dans la signature de méthode, Run est une méthode asynchrone statique publique qui accepte un objet HttpRequest et un objet ILogger comme paramètres et renvoie une tâche de IActionResult. L’objet HttpRequest inclut toutes les propriétés de la requête HTTP de déclenchement, tandis que l’ILogger est l’objet utilisé pour consigner des informations sur l’exécution de la fonction, à des fins de débogage et d’audit.

 

namespace AzureSampleFunction

{

public static class Function1

{

[FunctionName(“Function1”)]

public static async Task<IActionResult> Run(

[HttpTrigger(AuthorizationLevel.Anonymous, “get”, “post”, Route = null)] HttpRequest req,

ILogger log)

{

log.LogInformation(“C# HTTP trigger function processed a request.”);


En laissant de côté les détails de mise en œuvre, l’objectif de cette fonction est simple :

  • Assurez-vous que le corps de la requête HTTP ou la chaîne de requête comprend une propriété appelée name et que cette propriété a une valeur
  • Si la condition précédente est remplie, répondez avec succès avec un message d’accueil personnalisé
  • Sinon, informez les utilisateurs que leur demande n’est pas valide et fournissez des instructions pour y remédier.

Ce flux de travail est exprimé dans les lignes suivantes.

 

            string name = req.Query[“name”];

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

dynamic data = JsonConvert.DeserializeObject(requestBody);

name = name ?? data?.name;

return name != null

? (ActionResult)new OkObjectResult($« Bonjour, {name} »)

: new BadRequestObjectResult(« Veuillez passer un nom dans la chaîne de requête ou dans le corps de la requête »);

}

}

}

Nettoyage

Le meilleur argument de vente du Cloud est probablement son élasticité : si vous avez besoin de plus de ressources, vous pouvez puiser dans un pool pratiquement infini et lorsque vous avez terminé, vous pouvez simplement les libérer. Cela présente deux avantages : la possibilité d’évoluer à la demande et un contrôle précis des coûts.

Lorsque vous avez terminé avec votre IDE, vous pouvez l’éteindre et vous en débarrasser.

Connectez-vous au portail Azure et recherchez des « machines virtuelles » dans la barre de recherche principale. Sélectionnez votre machine de développement (« azure-ide ») dans la liste des machines virtuelles disponibles, puis appuyez sur « Arrêter ». Une fois la machine arrêtée, appuyez sur « Supprimer », comme illustré dans la figure.

Portail Azure

Principaux points à retenir

Étant nouveau sur Azure et Visual Studio, je suis impressionné par le degré d’intégration offert par l’IDE : en quelques clics, j’ai pu créer, tester et publier ma fonction.

L’expérience de développement est à bien des égards similaire à celle que j’ai eue avec AWS et Cloud9, bien sûr avec une saveur Microsoft et un support natif de .NET.

J’ai trouvé C# excessivement verbeux par rapport à d’autres langages que je connais mieux (Javascript, Python ou même Go), mais cela pourrait se résumer à des préférences personnelles.

Enfin, Azure Function Tools (un environnement de test local pour Azure Functions fourni par Visual Studio) est un ajout intéressant qui garantit une expérience de développement fluide.

Conclusion

La création et la publication d’une fonction sur Azure sont rendues extrêmement simples par Visual Studio. Ensemble, ces deux technologies offrent une première expérience fluide du développement Cloud natif. Bien sûr, le voyage vers la production de logiciels Cloud est encore long et plein de défis, mais cette incursion rapide dans l’écosystème Microsoft a démontré à quel point le Cloud peut être accessible et amusant. Quelle est la suite ?

Les fonctions Cloud sont idéales pour créer des robots, alimenter les backends d’applications Web, réaliser des tests de validation, orchestrer des flux de travail basés sur des événements, contribuer à la surveillance et aux alertes, construire des infrastructures, etc. Quoi que vous décidiez de construire, assurez-vous de suivre les meilleures pratiques d’ingénierie que vous adopteriez pour n’importe quel autre projet, comme avoir une pyramide de tests automatisée et saine, utiliser plusieurs environnements de déploiement, garder votre infrastructure dans le code et effectuer des déploiements automatisés via des solutions CI/CD telles que Azure DevOps.