Dans le développement logiciel, le serverless est devenu incontournable, et les Azure Functions font partie de ces avancées majeures. Ces programmes très légers permettent de répondre à de nombreuses problématiques que l’on va voir dans cet article.
Table des matières
⚙ Définition des Azure Functions
Une Azure Function, c’est donc avant tout un programme très léger qui va être exécuté sur un environnement serverless en PAAS. Il va être hébergé sur un environnement dédié dans votre infrastructure Azure.
Ce programme peut être développé sur votre langage favori (voir la liste des langages supportés).
Quand on parle de programme « léger », on va surtout penser en termes de temps d’exécution (pour être plus précis, de temps processeur). En effet, si les Azure Functions peuvent être exécuté sur des plages de temps assez long (minutes, heures…), il faut garder en tête que l’objectif de ces logiciels est d’avoir des temps d’exécution inférieurs à la seconde. C’est d’ailleurs ce que l’on peut observer dans le pricing de ces fonctions.
Pour une explication plus technique, les Azure Functions sont des containers (type docker / kubernetes) qui sont packagés dans un service très simple que chacun peut utiliser sans connaissance de containerisation, en quelques clics, et capable de monter en charge très rapidement.
💵 La facturation des Azure Functions
Mode Consumption / Premium
Microsoft indique très clairement l’objectif de ces fonctions par leurs facturations dans le mode « Consumption » : le prix est faible, mais vous serez facturé à la seconde de temps d’exécution et aux packs de millions d’exécutions effectués. Nous sommes donc clairement sur de l’hébergement chargé de faire tourner de nombreuses petites applications, et très régulièrement.
Mode App Service Plan
Lorsque vous utilisez les Azure Function en « App Service Plan », en fait vous bloquez une certaine puissance, sur laquelle vous allez pouvoir mettre une ou plusieurs Azure Functions.
Cela peut avoir plusieurs avantages et inconvénients. Côté facturation, contrairement au mode consumption, vous êtes sûr de ce que vous paierez à la fin (modulo la configuration de votre service autoscale, bien sur). Votre service Azure Function viendra « piocher » dans les ressources disponibles de votre App Service Plan afin d’être le plus efficace possible, mais au détriment d’une scalabilité limitée.
Ce type de facturation peut être très avantageuse pour les Azure Functions qui s’exécutent très régulièrement, voire en continu, toute la journée. C’est par contre bien moins efficace pour traiter des instructions très nombreuses, mais courtes, avec de forts pics d’activités.
Quels sont les cas d’usages des Azure Functions ?
Avoir des petites fonctions spécialisées, ça peut apporter plusieurs avantages en termes d’architecture logicielle. De plus, Azure propose nombre d’avantages supplémentaires par le biais de ses API et ses services. Voyons quelques-uns des principaux cas d’usages auxquels vous pourrez répondre de manière rapide et efficace avec les Azure Functions :
Tâches régulières
Créer une tâche CRON (qui s’exécute régulièrement) peut se faire en quelques minutes. Ce peut être un excellent démarrage à l’utilisation des Azure Functions, pour vos projets professionnels ou personnels, en profitant du free tier.
Création d’API & microservices
Par le biais des HTTP trigger, il peut être très simple de créer des API et de les héberger sur Azure. Le service Azure API Management permet de très simplement lier les Azure Function afin de protéger vos points d’accès et de mettre en place des limites d’accès. Par exemple, par clé API et/ou nombre de requêtes/minutes.
Trigger CosmoDB
Il est possible que vos fonctions agissent sur les données que vous allez insérer, ou récupérer, depuis CosmoDB. Via des triggers spécifiques, vous pourrez ainsi vérifier vos données, les enrichir, etc.
Traitement hautement parallélisable
Si vous avez des traitements importants à faire, il peut être intéressant d’envisager l’utilisation des Azure Function. Le processus étant serverless et hautement scalable, vous pouvez ainsi gagner énormément de temps par l’utilisation de cette technologie associée aux Azure Queue par exemple.
Par exemple, si vous avez plusieurs milliers de fichiers à retraiter, il est possible d’insérer dans Azure Queue l’ensemble des adresses de ces fichiers. Puis, pour chacun d’entre eux, une instance d’Azure Function viendra traiter le fichier qu’il a pris en charge. Vous pourrez ainsi traiter votre masse d’information en simultanée.
Création de processus pour Azure Logic App
Votre Azure Function peut être utilisé dans une application Azure Logic App afin de répondre à un besoin que vous n’auriez pas trouvé dans la liste des fonctions disponibles par défaut. Vous pouvez ainsi étendre le champ des possibles, déjà important, de l’utilisation de l’application « No Code ». Vous pouvez consulter notre article sur Azure Logic App pour plus d’informations.
Autres (Azure Sentinel, Azure Security, …)
On l’a vu au-dessus, notamment avec Azure Logic App : Les Azure Function s’intègre très bien dans l’écosystème Azure. Certaines fonctionnalités sont même dépendantes de ce service. La liste qui a été indiquée n’est pas exhaustive, et sert surtout d’exemple pour que vous appréhendiez mieux comment tirer parti au maximum des Azure Functions.
🛠 Comment créer une Azure Function
Pour créer une Azure Function, j’utilise personnellement Visual Studio car c’est mon IDE principal et qu’il permet d’émuler les Azure Function et les Azure Queues en local. Mais vous pouvez utiliser VSCode, la ligne de commande, voir même directement coder votre Azure Function dans le portail Azure, comme décrit dans cet Article MSLearn.
📈 Bien monitorer son Azure Function
Maintenant qu’on a une application en ligne, il va être important de surveiller qu’elle tourne bien. Et pour ça, quelques astuces !
L’overview
Tout d’abord, en allant sur votre Azure Function sur portal.azure.com, vous trouverez dans l’onglet « overview » plusieurs tableaux. A mes yeux, le plus important est le « Function Execution Count ». Il va vous permettre de surveiller si votre fonction s’exécuté, et dans quelles proportions. C’est très utile lorsque les fonctions sont liées aux Azure Queue.
Le détail par fonction
Il peut être bon à savoir que, sur un projet Azure Function, vous pouvez avoir plusieurs fonctions. Point important, chaque fonction peut être surveillée indépendamment, et être arrêtée aussi. On gagne en souplesse par rapport à un projet .Net « WebJob » !
En entrant sur le détail d’une des fonctions, Il est possible de retrouver les informations de l’overview, mais propre à la fonction ciblée.
Enfin, vous pouvez voir l’onglet « Monitor », qui vous donnera un meilleur détail sur chaque exécution. Vous pourrez voir les dates d’exécution, si c’était un succès ou non, mais aussi la durée d’exécution. Si vous cliquez sur le lien de chaque exécution, vous y retrouverez l’ensemble des logs App Insight propre à cette exécution, ce qui est fort pratique lorsque une exécution a échoué et que l’on cherche à comprendre pourquoi.
App Insight
Lors de la création du service, il est fort probable que vous ayez créé dans la foulée le service App Insight rattaché. Dans tous les cas, allez sur l’onglet « App Insight » de votre Azure Function. Vous y trouverez soit un lien d’accès, soit la possibilité de créer directement le service.
App Insight reste l’outil central pour surveiller son application sur Azure, quel qu’elle soit. Les logs et tableaux précédemment cités se basent tous in fine sur App Insight.
Je ne vais pas détailler ici son fonctionnement, car il mérite un cours en soi. N’hésitez pas à y jeter un coup d’oeil. Vous y trouverez des informations fort utiles, tant sur forme de tableau qu’en donnée brute. Il est aussi possible de remonter facilement des logs custom grâce à son API.
Tableaux App Service Plan (pour cette méthode de facturation)
Si vous avez privilégié la méthode de consommation par App Service Plan, pensez à surveiller régulièrement la consommation CPU / mémoire sur vos App Service Plan. Il est aussi important d’envisager de mettre en place et surveiller le service d’autoscaling (voir Adaptez la consommation de votre app avec Azure Autoscale).