avril 12, 2021

Tuto: Ma première Azure function (1/3)

Qu’est-ce qu’une Azure Function ?

Une Azure Function est un petit bout de code que vous mettez à disposition sur des serveurs et qui ne demande qu’à être exécuté au moyen de déclencheurs (on parle plus communément de « triggers »).

Ce code peut être lié à d’autres ressources disponibles sur Azure, via les liaisons (mais on parlera plutôt de « binding »). Il y a deux types de liaisons, « input » et « output ». L’intérêt du binding est d’accéder très simplement à une ressource. Cette ressource nous est passé en paramètre de notre fonction.

Vous pouvez utiliser différents langages, selon les versions du runtime.

Langages supportés selon la version du runtime

ℹ️ A noter que pour ce tutoriel, le langage utilisé est JavaScript. ℹ️


A quoi ça sert ? Analyse d’un besoin.

Hummm ok d’accord c’est cool tout ça mais… Tu aurais un exemple pour concrétiser tout ça ? ?

Jean-Développeur

Imaginez que votre client, Bernard, dispose d’un blob storage. C’est-à-dire un endroit qui permet de stocker beaucoup de choses sur le cloud, avec des notions de hiérarchies comme dans « Mes documents » dans Windows, pour faire simple.
De temps en temps, une personne dépose un fichier texte dans ce fameux « blob ».
Le travail de Bernard est de vérifier si un nouveau fichier a été déposé dans le blob. Si un nouveau fichier est présent, il doit l’ouvrir et vérifier que le premier mot est « BONJOUR ». Il doit enfin envoyer un e-mail à un service spécifique de sa société pour informer si fichier déposé contient « bonjour » ou non…

Cette tâche est tout à fait automatisable. Il n’y aura pas beaucoup de traitements, ce qui est parfait. Une Azure Function c’est un petit morceau de code qui ne fait qu’une chose ! Si vous voulez en faire plus, tournez-vous vers les webjobs !
Analysons-le travail de Bernard et adaptons le à Azure Function. Vous comprendrez l’intérêt du trigger et des bindings.

Déterminer le trigger

Selon la description, nous avons deux choix possibles pour déclencher notre function :

  • « Une personne dépose un fichier » : on pourrait déclencher notre function à ce moment-là ! Dès qu’un fichier est déposé, notre function est appelée et on récupère notre fichier en paramètre de function.
    Le trigger sera le dépôt d’un fichier dans le blob. Le trigger est donc le blob !
  • « Bernard vérifie si un nouveau fichier a été déposé » : ici Bernard regarde de temps en temps si un nouveau fichier est présent. Il faudrait par exemple que toutes les 5 minutes notre function soit déclenchée. C’est possible avec un trigger de type « timer ».

⚠️ Attention : une Azure Function n’a qu’un seul trigger possible. ⚠️

Déterminer les bindings

Maintenant il est temps de déterminer ce qui rentre et ce qui sort de notre function. Si nous avons choisi le trigger blob, l’input binding (ou liaison d’entrée) de notre function est de type blob. Ce qui veut dire qu’en paramètre de notre function nous aurons un accès direct à notre fichier.

En revanche, si nous avons choisi le trigger de type timer, l’input binding est de type… blob également !

Mais je ne comprends pas, avec le trigger timer, la function va s’exécuter toutes les 5 minutes. On devra aller récupérer tous les fichiers présents dans le blob. Donc c’est quoi l’intérêt d’avoir un input binding de type blob puisqu’on ne sait pas quel fichier analyser ? ?

Je pensais qu’on allait, dans le code, se connecter au blob storage en utilisant une connection string et qu’on allait récupérer tous les fichiers !

Jean-Développeur

C’est vrai ça, bien vu Jean Développeur ! Sauf qu’il n’a jamais été dit qu’un input binding de type blob ciblait forcément un fichier ! On peut également cibler un « container », ou un « dossier » pour simplifier la chose. Plutôt que de nous donner accès au fichier directement, nous aurons accès au « dossier » qui contient tous les fichiers. Pratique non ? Comment on fait ça ? La subtilité se trouve dans la configuration de notre function. Nous verrons cela en temps voulu.

Et oui, l’intérêt du binding est bien de nous faciliter la vie et de gagner du temps de développement ! Pas besoin de se connecter manuellement et tout le tralala. Là, on va à l’essentiel.

Des bindings, il y en a plusieurs. Et chaque type de binding a des paramètres différents, cela dépend du type de ressource. Voici un tableau regroupant les combos trigger/input/ouput selon le type de ressource :

Les binding pris en charge

N’hésitez pas à vous rendre sur la documentation de Microsoft pour plus d’informations.

Tiens, tant que nous y sommes, serait-il possible de trouver un output binding qui nous simplifierait l’envoi de l’email ? Bah oui, ça aussi on doit l’automatiser ! Recherchons dans le tableau ci-dessus.

En regardant ce que font les différentes ressources dans le tableau, je m’aperçois que SendGrid nous permet d’envoyer un e-mail, parfait !

Le choix technique

Pour ce tutoriel, voici les choix techniques :

  • Technologie utilisée pour l’Azure Function : NodeJS / JS
  • Input binding : blobTrigger
  • Ouput binding : sendGrid
  1. Un fichier texte est déposé dans le blob de Bernard,
  2. l’azure function va être déclenchée par le blobTrigger
  3. l’azure function récupère le fichier déposée en entrée de function (input binding)
  4. traitement du fichier
  5. envoi de l’e-mail via sendGrid (output binding)

Si on devait schématiser ce que j’ai dis précédemment, voilà à quoi ça ressemblerait !

Développeurs… développons !

Vous savez ce qu’est une azure function et avez compris comment nous allons répondre au besoin de Bernard ? Parfait ! Il est temps de passer à la création des ressources, à la compréhension des fichiers qui composent une function et enfin… à l’implémentation !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *