Site icon A DevOps journey

⚡ Que sont les Azure Functions ?

Les Azure Functions peuvent répondre à de nombreux scénarios.
Source

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.

⚙ 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.

Exemple d’architecture logicielles, et de comment est orienté Azure Function

💵 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.

Un free tier proposant des millions d’exécutions par mois est disponible. Idéal pour essayer, ou pour de petits projets ! Source : https://azure.microsoft.com/en-us/pricing/details/functions/

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.

Un rapide schéma des différences entre les modes

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.

La création d’Azure Function dans Visual Studio
Exemple d’une Azure Function avec un Trigger HTTP, et liste des triggers disponibles

📈 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.

L’écran de monitoring d’Azure permet de surveiller le fonctionnement des Azure Function et leurs efficacités. En l’occurrence, on voit que chaque heure, j’ai bien deux tours de boucle qui sont effectués, de ~81k éléments chacune. Il faut ~15mn pour traiter une boucle avec les performances actuelles.

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 » !

La liste des fonctions montre les deux composantes de mon projet. Il est possible d’en voir le détail, ou de les arrêter indépendamment l’un de l’autre.

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.

On peut voir le tableau « Total execution Count » et « Successful Execution Count » qui nous permette de nous assurer que cette fonction tourne correctement.

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.

De nombreux onglets peuvent vous aider à mieux surveiller votre application
Vous pouvez aussi accéder aux logs par Log Analytics et le langage Kusto

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).

Quitter la version mobile