Exercice : Créer un workflow à l’aide de Durable Functions

Effectué

Dans cet exercice, vous utilisez le scénario de l’exemple de l’unité précédente pour apprendre à créer un workflow d’approbation dans le Portail Azure en tirant parti de Durable Functions.

Créer une application de fonction

  1. Connectez-vous au portail Azure en utilisant le même compte que celui avec lequel vous avez activé le bac à sable.

  2. Dans le menu du portail Azure ou dans la page Accueil, sous Services Azure, sélectionnez Créer une ressource. Le volet Créer une ressource apparaît.

  3. Recherchez et sélectionnez Application de fonction. Le volet Créer une application de fonction s’affiche.

  4. Sous l’onglet Informations de base, entrez les valeurs suivantes pour chaque paramètre.

    Paramètre valeur Description
    Détails du projet
    Abonnement Abonnement Concierge Spécifie l’abonnement sous lequel est créée cette application de fonction.
    Groupe de ressources Dans la liste déroulante, sélectionnez [Nom du groupe de ressources de bac à sable] Spécifie le nom du groupe de ressources dans lequel créer votre application de fonction. Nous créons l’application de fonction dans le groupe de ressources de bac à sable attribué lors de l’activation de ce dernier, à savoir [nom du groupe de ressources de bac à sable].
    Détails de l’instance
    Nom de l’application de fonction [Nom global unique] Spécifie le nom qui identifie votre nouvelle application de fonction. Les caractères valides sont a-z, 0-9 et -.
    Publier Code Permet de spécifier que la fonction utilise du code au lieu d’un conteneur.
    Pile d’exécution Node.js Spécifie que l’exemple de code de ce module est écrit en JavaScript.
    Version 20 LTS Spécifie la version de la pile d’exécution.
    Région [Sélectionnez dans la liste qui suit cette section] Choisissez la région la plus proche qui est également l’une des régions de bac à sable autorisées suivantes.
    Système d’exploitation
    Système d'exploitation Windows Spécifie le système d’exploitation qui héberge l’application de fonction.
    Planification
    Type de plan Consommation (serverless) Spécifie le plan d’hébergement qui définit la façon dont les ressources sont allouées à votre application de fonction. Dans le plan Consommation par défaut, les ressources sont ajoutées dynamiquement en fonction des besoins de vos fonctions. Dans ce modèle d’hébergement serverless, vous payez uniquement pour la durée d’exécution de vos fonctions.

    Le bac à sable gratuit vous permet de créer des ressources dans certaines régions Azure du monde. Sélectionnez une région dans la liste suivante au moment où vous créez des ressources :

    • USA Ouest 2
    • États-Unis - partie centrale méridionale
    • USA Centre
    • USA Est
    • Europe Ouest
    • Asie Sud-Est
    • Japon Est
    • Brésil Sud
    • Australie Sud-Est
    • Inde Centre
  5. Sélectionnez Suivant : Stockage.

  6. Sous l’onglet Stockage, entrez les valeurs suivantes pour chaque paramètre.

    Paramètre valeur Description
    Stockage
    Compte de stockage [Nom global unique] Spécifie le nom du nouveau compte de stockage utilisé par votre application de fonction (qui n’a pas besoin de correspondre au nom globalement unique que vous avez spécifié pour votre fonction). Les noms des comptes de stockage doivent comporter entre 3 et 24 caractères, uniquement des lettres minuscules et des chiffres. Cette boîte de dialogue remplit automatiquement le champ avec un nom unique généré dynamiquement. Toutefois, n’hésitez pas à utiliser un autre nom ou même un compte existant.
  7. Sélectionnez Suivant : Réseau. Acceptez les valeurs par défaut.

  8. Sélectionnez Suivant : Supervision.

  9. Sous l’onglet Surveillance, entrez la valeur suivante pour le paramètre.

    Paramètre valeur Description
    Application Insights
    Activer Application Insights Aucun Permet de spécifier que la fonctionnalité Application Insights est désactivée pour ce module.
  10. Sélectionnez Vérifier + créer et vérifiez les options que vous avez configurées. Si elles vous conviennent, sélectionnez Créer pour provisionner et déployer l’application de fonction.

Attendez que le déploiement se termine avant de continuer. Le déploiement peut prendre quelques minutes.

Installer le package npm durable-functions

Comme nous créons des Durable Functions JavaScript, nous devons installer le package npm durable-functions. Pour cela, effectuez les étapes suivantes.

  1. Sélectionnez Accéder à la ressource pour sélectionner votre application de fonction. Votre volet Application de fonction s’affiche.

  2. Dans le volet du menu de gauche, sous Outils de développement, sélectionnez Éditeur App Service (préversion), puis Ouvrir l’éditeur. Le volet Démarrage rapide de l’Éditeur App Service s’affiche dans une nouvelle fenêtre de navigateur.

  3. Dans le volet du menu de gauche, mettez en surbrillance le dossier WWWROOT.

  4. Dans le menu de gauche de la barre d’outils, sélectionnez l’icône Ouvrir la console.

    La console se lance. Utilisez cette console pour accéder au serveur web qui héberge vos fonctions et pour écrire le code de vos fonctions.

  5. Créez un fichier package.json.

    • Exécutez les commandes suivantes dans la console pour créer le fichier JSON et l’ouvrir dans l’éditeur.

      touch package.json
      open package.json
      
    • Ajoutez le code ci-dessous.

      {
        "name": "example",
        "version": "1.0.0"
      }
      

      Remplacez example par le nom de votre package. Par exemple, vous pouvez utiliser le nom globalement unique que vous avez spécifié pour votre fonction précédemment.

  6. Sélectionnez Ctrl+S pour enregistrer le fichier, puis Ctrl+Q pour fermer le document.

  7. Revenez au portail Azure.

  8. Dans la barre de menus de gauche, sous Outils de développement, sélectionnez Console. Le volet Console s’affiche pour votre application de fonction.

  9. Exécutez la commande suivante :

    npm install durable-functions
    

    Cette commande demande au gestionnaire de package de nœud d’installer le package durable-functions et toutes les dépendances nécessaires. L’achèvement de l’installation peut prendre quelques minutes et il est possible que le gestionnaire de package de nœud affiche des avertissements que vous pouvez ignorer. Si vous êtes invité à installer une version plus récente de npm, utilisez la commande indiquée dans l’erreur pour installer la version la plus récente, puis installez le package durable-functions une fois la nouvelle version installée.

    Attendez la fin de l’installation de tous les packages.

  10. Dans le volet du menu de gauche, faites défiler vers le haut et, dans la barre de menus supérieure, sélectionnez successivement Vue d’ensemble, Redémarrer, puis Oui lorsque vous êtes invité à redémarrer.

    Attendez la fin du redémarrage avant de continuer.

Créer la fonction de client pour envoyer une proposition de conception

  1. Dans le menu du portail Azure ou dans la page Accueil, sous Ressources récentes, sélectionnez Tout voir, puis sélectionnez votre application de fonction. Votre volet Application de fonction s’affiche.

  2. Dans la page Vue d’ensemble, sélectionnez l’onglet Fonctions dans le centre de l’écran.

  3. Sélectionnez le bouton Créer dans le portail Azure. Le volet Créer une fonction s’affiche.

  4. Sous Sélectionner un modèle, dans la zone Filtre, entrez Démarrage HTTP Durable Functions, puis sélectionnez ce modèle dans la liste. Ce modèle crée une fonction durable qui s’exécute en réponse à une demande HTTP.

  5. Sous Détails du modèle, pour le champ Nouvelle fonction, entrez HttpStart pour le nom de la fonction, et dans le champ Niveau d’autorisation, sélectionnez Fonction, puis Créer. Le volet HttpStart s’affiche pour votre fonction.

  6. Dans le volet du menu de gauche, sélectionnez Code + test sous Développeur. Le volet Code + Test s’affiche pour votre fonction.

    Le code du fichier index.js s’affiche dans l’éditeur. Le fichier doit ressembler à l’exemple suivant :

    const df = require("durable-functions");
    
    module.exports = async function (context, req) {
        const client = df.getClient(context);
        const instanceId = await client.startNew(req.params.functionName, undefined, req.body);
    
        context.log(`Started orchestration with ID = '${instanceId}'.`);
    
        return client.createCheckStatusResponse(context.bindingData.req, instanceId);
    };
    
  7. Dans la liste déroulante des fichiers de votre fonction, sélectionnez function.json pour afficher les liaisons associées à votre nouvelle fonction. Ces informations spécifient les exigences d’authentification, ainsi que les méthodes HTTP susceptibles de déclencher la fonction. Ce fichier spécifie également que la fonction est un client qui démarre le processus d’orchestration. Le fichier doit ressembler à l’exemple suivant :

    {
      "bindings": [
        {
          "authLevel": "function",
          "name": "req",
          "type": "httpTrigger",
          "direction": "in",
          "route": "orchestrators/{functionName}",
          "methods": [
            "post",
            "get"
          ]
        },
        {
          "name": "$return",
          "type": "http",
          "direction": "out"
        },
        {
          "name": "starter",
          "type": "orchestrationClient",
          "direction": "in"
        }
      ]
    }
    

    Remarque

    Une liaison associe des ressources et d’autres éléments à un déclencheur. Il s’agit d’un mécanisme déclaratif qui vous évite d’avoir à coder en dur les références à d’autres services et fonctions dans votre code.

Créer la fonction d’orchestration

  1. Dans le menu du portail Azure ou dans la page Accueil, sous Ressources récentes, sélectionnez Tout voir, puis sélectionnez votre application de fonction. Votre volet Application de fonction s’affiche.

  2. Dans la page Vue d’ensemble, sélectionnez l’onglet Fonctions au centre de l’écran.

  3. Dans la barre de menus Fonctions, sélectionnez Créer. Le volet Créer une fonction s’affiche.

  4. Sous Sélectionner un modèle, dans la zone Filtre, entrez Orchestrateur Durable Functions, puis sélectionnez ce modèle dans la liste. Ce modèle crée une fonction durable qui orchestre l’exécution des fonctions.

  5. Sous Détails du modèle, pour le champ Nouvelle fonction, entrez OrchFunction pour le nom de la fonction, puis sélectionnez Créer. Le volet de la fonction OrchFunction s’affiche.

  6. Dans le volet du menu de gauche, sélectionnez Code + test sous Développeur. Le volet Code + Test s’affiche pour votre fonction.

    Le code du fichier index.js s’affiche dans l’éditeur.

  7. Remplacez le code existant par le code ci-dessous.

    const df = require("durable-functions");
    
    module.exports = df.orchestrator(function* (context) {
        const outputs = [];
    
        /*
        * We will call the approval activity with a reject and an approved to simulate both
        */
    
        outputs.push(yield context.df.callActivity("Approval", "Approved"));
        outputs.push(yield context.df.callActivity("Approval", "Rejected"));
    
        return outputs;
    });
    

    Ce code appelle une fonction d’activité nommée Approbation que vous allez bientôt créer. Le code dans la fonction d’orchestration appelle deux fois la fonction Approbation. La première fois simule l’acceptation de la proposition et la deuxième teste la logique de rejet de la proposition.

    Les valeurs retournées par les appels sont combinées, puis passées à la fonction de client. Dans un environnement de production, votre fonction d’orchestration appellerait une série de fonctions d’activités qui prendraient la décision d’acceptation ou de refus, et retournerait le résultat de ces activités.

  8. Dans la barre de menus supérieure, sélectionnez Enregistrer pour enregistrer votre nouvelle fonction.

Créer la fonction d’activité

  1. Dans le menu du portail Azure ou dans la page Accueil, sous Ressources récentes, sélectionnez Tout voir, puis sélectionnez votre application de fonction. Votre volet Application de fonction s’affiche.

  2. Dans la page Vue d’ensemble, sélectionnez l’onglet Fonctions au centre de l’écran.

  3. Dans la barre de menus Fonctions, sélectionnez Créer. Le volet Créer une fonction s’affiche.

  4. Sous Sélectionner un modèle, dans la zone Filtre, entrez Activité Durable Functions, puis sélectionnez ce modèle dans la liste. Ce modèle crée une fonction durable qui s’exécute lorsqu’une activité est appelée par une fonction orchestrator.

  5. Sous Détails du modèle, pour le champ Nouvelle fonction, entrez Approval pour le nom de la fonction, puis sélectionnez Créer. Le volet Approbation s’affiche pour votre application de fonction.

  6. Dans le volet du menu de gauche, sélectionnez Code + test sous Développeur. Le volet Code + Test s’affiche pour votre fonction.

    Le code du fichier index.js s’affiche dans l’éditeur.

  7. Remplacez le code existant par le code ci-dessous.

    module.exports = async function (context) {
        return `Your project design proposal has been -  ${context.bindings.name}!`;
    };
    

    La fonction retourne un message indiquant l’état de la proposition. L’expression context.bindings.name a la valeur Accepted ou Rejected selon le paramètre transmis à la fonction à partir de l’orchestrateur. Dans un scénario réel, vous ajouteriez une logique qui gère les opérations d’acceptation et de refus dans cette fonction.

  8. Dans la barre de menus supérieure, sélectionnez Enregistrer pour enregistrer votre nouvelle fonction.

Vérifier que le workflow Durable Functions démarre bien

  1. Dans le menu du portail Azure ou dans la page Accueil, sous Ressources récentes, sélectionnez Tout voir, puis sélectionnez votre application de fonction. Votre volet Application de fonction s’affiche.

  2. Sélectionnez l’onglet Fonctions au centre de la page.

  3. Sélectionnez la fonction HttpStart. Le volet HttpStart s’affiche pour votre fonction.

  4. Dans la barre de menus supérieure, sélectionnez Obtenir l’URL de la fonction et copiez l’URL. L’URL doit ressembler à l’exemple suivant :

    https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Vous utilisez cette URL pour exécuter vos fonctions.

  5. Ouvrez une nouvelle fenêtre de navigateur, puis accédez à l’URL que vous avez copiée. Dans l’URL, remplacez l’espace réservé {functionName} par OrchFunction, comme dans l’exemple suivant :

    https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Le message de réponse contient un ensemble de points de terminaison d’URI que vous pouvez utiliser pour superviser et gérer l’exécution, et qui ressemble à l’exemple suivant :

    {
      "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f",
      "statusQueryGetUri": "https://example.azurewebsites.net/...",
      "sendEventPostUri": "https://example.azurewebsites.net/...",
      "terminatePostUri": "https://example.azurewebsites.net/...",
      "rewindPostUri": "https://example.azurewebsites.net/...",
      "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..."
    }
    
  6. Copiez la valeur de statusQueryGetUri, puis accédez à cette URL dans votre navigateur web. Vous devez normalement voir un message de réponse semblable à l’exemple suivant :

    {
      "name": "OrchFunction",
      "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f",
      "runtimeStatus": "Completed",
      "input": null,
      "customStatus": null,
      "output": [
        "Your project design proposal has been -  Approved!",
        "Your project design proposal has been -  Rejected!"
      ],
      "createdTime": "2019-04-16T15:23:03Z",
      "lastUpdatedTime": "2019-04-16T15:23:35Z"
    }
    

    Rappelez-vous que la fonction d’orchestration exécute deux fois la fonction d’activité. La première fois, la fonction d’activité indique que la proposition de projet est acceptée. La seconde fois, elle indique que la proposition a été refusée. La fonction d’orchestration combine les messages générés par ces deux appels de fonction et les retourne à la fonction cliente.