
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.
Appuyez sur « + Ajouter » pour créer une nouvelle machine virtuelle. Remplissez le formulaire comme illustré dans les figures suivantes :
Choisissez un « Groupe de ressources » dans la liste déroulante ou créez-en un nouveau en cliquant sur « Créer nouveau ».
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.
Configurez un utilisateur administrateur et notez votre nom d’utilisateur ainsi que votre mot de passe.
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 :
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.
- 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.
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 ».
Dans la liste des projets disponibles, sélectionnez « Azure Functions ». Appuyez sur « Suivant ».
Nommez votre fonction comme indiqué sur la figure et sélectionnez un chemin sur votre disque pour héberger le code.
Sélectionnez « Http trigger », définissez Storage Emulator comme votre « Storage Account » et enfin sélectionnez « Anonymous » comme niveau d’autorisation.
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.
Visual Studio compilera et exécutera votre fonction localement. Prenez note de l’URL de Function1, mise en évidence dans la figure suivante.
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.
Exécutez la commande suivante pour invoquer la fonction en cours d’exécution localement.
curl http://localhost:7071/api/Function1?name=azure
Veuillez noter que votre URL peut être différente.
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
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.
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 ».
Vous devez vous connecter à votre compte Azure : cliquez sur « Se connecter » et entrez les informations d’identification de votre compte.
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 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.
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.
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.
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.