avec AWS Step Functions et Amazon SQS

Niveau : Intermédiaire
Durée : 10 minutes

Dans ce didacticiel, vous allez découvrir comment utiliser AWS Step Functions et Amazon SQS pour concevoir et exécuter un flux de travail sans serveur qui orchestre un microservice basé sur des files d'attente de messages. Step Functions est un service d'orchestration sans serveur qui vous permet de facilement coordonner plusieurs services AWS dans des flux de travail flexibles faciles à déboguer et à modifier. Amazon SQS est le service AWS qui permet aux composants d'application de communiquer dans le cloud.

Ce didacticiel simulera des demandes de vérification d’inventaire de commandes entrantes dans une application e-commerce dans le cadre d’un flux de traitement de commande. Step Functions enverra des demandes de vérification d’inventaire à une file d’attente sur SQS. La fonction AWS Lambda agira comme votre microservice d’inventaire et utilisera une file d’attente pour les demandes de mise en mémoire tampon. Lors de l’extraction d’une demande, elle vérifiera l’inventaire et retournera le résultat vers Step Functions. Lorsqu’une tâche est ainsi configurée dans Step Functions, on parle de modèle de rappel. Les modèles de rappel vous permettent d’intégrer des tâches asynchrones dans votre flux, comme le microservice de vérification d’inventaire de ce didacticiel.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-un-diagramme-step-functions

Ce didacticiel nécessite d'avoir un compte AWS.

Créez un compte gratuit

Aucuns frais supplémentaires ne s'appliquent pour AWS Step Functions ou Amazon SQS. Les ressources que vous créez dans ce didacticiel sont éligibles à l'offre gratuite.

Voir les détails relatifs à l'offre gratuite d'AWS »

a. Ouvrez AWS Management Console afin de maintenir le guide détaillé ouvert. Lorsque l’écran se charge, saisissez votre nom d'utilisateur et votre mot de passe pour commencer. Ensuite, tapez SQSdans la barre de recherche et sélectionnezSimple Queue Service pour ouvrir la console de service.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-1a

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-1a

b. Si la page d'accueil de la console SQS s'affiche, comme indiqué sur la capture d’écran, cliquez sur Pour commencer. Si cette page ne s'affiche pas, passez à l'étape suivante.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-1b

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-1b

Dans cette étape, vous allez créer et configurer une file d’attente Amazon SQS. Une file d’attente est un tampon fiable et hautement évolutif qui stocke des messages lorsqu’ils voyagent entre les miscroservices et les applications distribuées. Les files d’attente permettent de découpler les applications, connecter les microservices, créer des lots de tâches ou stocker les notifications.
Notre cas d’utilisation pour SQS dans ce didacticiel simulera le stockage des demandes de vérification d’inventaire de commandes entrantes dans une application e-commerce.


a. Nous allons d’abord créer une file d’attente simple qui stocke les commandes passées sur la boutique. Saisissez Commandes dans le champ Nom de la file d’attente.

tmt-orchestrer-des-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2a

(cliquez pour zoomer)

tmt-orchestrer-des-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2a

b. Pour ce didacticiel, nous ne demandons pas de classement strict. Nous n’apporterons donc pas de changement au type de file d’attente. Quittez la file d’attente standard sélectionnée.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2b

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2b

c. Vous pouvez configurer votre file d’attente pour modifier des paramètres comme la période de rétention, la taille maximum des messages et les délais de livraison. Pour ce didacticiel, nous conserverons les paramètres par défaut. Cliquez sur Quick-Create Queue.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2c

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2c

d. Votre nouvelle file d'attente est créée et sélectionnée dans la liste des files d'attente.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2d

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-2d

La prochaine étape consiste à concevoir un flux de travail qui décrit la façon dont vous souhaitez traiter les commandes e-commerce. Les flux de travail décrivent un processus comme une série de tâches discrètes qui peuvent être répétées à l'infini.
Vous concevrez ensuite votre flux de travail dans AWS Step Functions. Votre flux de travail demandera une vérification de votre inventaire à partir d’un microservice. De nombreux microservices utilisent une file d’attente pour la réception des demandes. Dans ce didacticiel, vous utiliserez une fonction AWS Lambda pour représenter le microservice.


a. Ouvrez la console AWS Step Functions. Sélectionnez Author with code snippets (Créer des extraits de code), puis nommez votre machine d’état InventoryStateMachine.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3c

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3c

b. Remplacer le contenu de la fenêtre Définition de la machine d'état par la définition de machine d'état Amazon States Language (ASL) ci-dessous. Amazon States Language est un langage structuré basé sur JSON utilisé pour définir votre machine d'état.

Cette machine d’état utilise l’état d’une tâche pour mettre un message dans une file d’attente SQS. L’état de cette tâche est configuré pour un modèle de rappel. Lorsque vous ajoutez .waitForTaskToken à votre ressource, Step Functions ajoutera un jeton de tâche à la charge utile JSON et attendra un rappel. Le microservice peut retourner un résultat vers Step Functions en appelant l’API Step Functions.

{
  "Comment": "An example of the Amazon States Language for starting a callback task.",
  "StartAt": "Check Inventory",
  "States": {
    "Check Inventory": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
      "Parameters": {
        "QueueUrl": "<INSERT SQS QUEUE URL HERE>",
        "MessageBody": {
          "MessageTitle": "Callback Task started by Step Functions",
          "TaskToken.$": "$$.Task.Token"
        }
      },
      "Next": "Notify Success",
      "Catch": [
      {
        "ErrorEquals": [ "States.ALL" ],
        "Next": "Notify Failure"
      }
      ]
    },
    "Notify Success": {
      "Type": "Pass",
      "Result": "Callback Task started by Step Functions succeeded",
      "End": true
    },
    "Notify Failure": {
      "Type": "Pass",
      "Result": "Callback Task started by Step Functions failed",
      "End": true
    }
  }
}
tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3d

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3d

c. Copiez l’URL de votre file d’attente SQS depuis la console SQS et collez-la dans votre définition de machine d’état.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3e

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3e

d. Cliquez sur le bouton Actualiser pour permettre à Step Functions de traduire la définition de la machine d'état ASL en flux de travail visuel. Vous pouvez facilement vérifier que le processus est correctement décrit en passant en revue le flux de travail visuel. Lorsque le microservice retourne un résultat, la machine d’état évoluera vers la branche Success. En cas de problème, vous pouvez intercepter l’exception et descendre le long de la branche droite pour prendre des mesures correctives.

Cliquez sur Suivant.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3f

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3f

e. Vous devez ensuite ajouter un rôle IAM à votre flux de travail. Sélectionnez Créer un rôle IAM pour moi et nommez-le inventory-state-machine-role. Step Functions analysera votre flux de travail et générera une stratégie IAM comprenant les ressources utilisées par votre flux de travail. Cliquez sur Créer une machine d'état. Une bannière verte indiquant que votre machine d’état a été créée avec succès doit s’afficher.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3g

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-3g

AWS IAM est un service web qui vous permet de contrôler en toute sécurité l'accès aux ressources AWS. Dans cette étape, vous allez créer un rôle IAM qui permet à Step Functions d'accéder à SQS.


a. Dans une autre fenêtre du navigateur, ouvrez AWS Management Console. Lors du chargement de l'écran, tapez IAM dans la barre de recherche, puis sélectionnez IAM pour ouvrir la console de service.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4a

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4a

b. Cliquez sur Rôles, puis sur Créer un rôle.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4b

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4b

c. Dans l'écran Créer un rôle, laissez l’option Service AWS cochée, sélectionnez Lambda, puis cliquez sur Suivant : Autorisations.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4c

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4c

d. Dans l’écran Créer un rôle, attachez
les stratégies AmazonSQSFullAccess et AWSStepFunctionsFullAccess. Cliquez sur Suivant : Balises, puis sur Suivant : Vérification.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4d

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4d

e. Saisissez inventory-lambda-role comme nom de rôle et cliquez sur Créer un rôle.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4e

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-4e

Dans cette étape, vous allez créer une fonction Lambda qui simulera un microservice d’inventaire. La fonction Lambda extrait les messages de SQS et renverra un message vers Step Functions qui représente le résultat de la demande.


a. Cliquez sur Services, tapez Lambda dans la barre de recherche, puis sélectionnez Lambda pour ouvrir la console de service.

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5a

b. Sélectionnez Créer une fonction.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5b

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5b

c. Laissez l'option Créer à partir de zéro cochée. Configurez ensuite votre première fonction Lambda comme suit :

Dans le champ Nom, saisissez Inventory.
Dans le champ Runtime, choisissez Node.js 8.10.
Dans le champ Rôle, sélectionnez Utiliser un rôle existant.

Sélectionnez inventory-lambda-role dans la liste
Cliquez sur Créer une fonction.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5c

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5c

d. Remplacez le contenu de la fenêtre Code de la fonction par le code suivant, puis cliquez sur Enregistrer.

console.log('Loading function');
          const aws = require('aws-sdk');

          exports.handler = (event, context, callback) => {
              const stepfunctions = new aws.StepFunctions();

              for (const record of event.Records) {
                  const messageBody = JSON.parse(record.body);
                  const taskToken = messageBody.TaskToken;

                  const params = {
                      output: "\"Callback task completed successfully.\"",
                      taskToken: taskToken
                  };

                  console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`);

                  stepfunctions.sendTaskSuccess(params, (err, data) => {
                      if (err) {
                          console.error(err.message);
                          callback(err.message);
                          return;
                      }
                      console.log(data);
                      callback(null);
                  });
              }
          };
tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5d

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5d

e. Sélectionnez le déclencheur SQS. Configurez-le pour Activer votre file d’attente Commandes. Cliquez sur Ajouter, puis sur Enregistrer.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5e

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-5e

Votre flux de travail sans serveur est maintenant prêt à être exécuté. L'exécution d'une machine d'état est une instance de votre flux de travail et survient chaque fois qu'une machine d'état Step Functions est exécutée et effectue ses tâches. Chaque machine d'état Step Functions peut disposer de plusieurs exécutions simultanées que vous pouvez initier depuis la console Step Functions (ce que nous ferons ensuite) ou en utilisant les kits AWS SDK, les actions d'API Step Functions ou l'interface de ligne de commande AWS. Une exécution reçoit une entrée JSON et produit un résultat JSON.


a. Cliquez sur Services, tapez Step dans la barre de recherche, puis sélectionnez Step Functions pour ouvrir la console de service.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6a

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6a

b. Dans l’écran Machines d’état, cliquez sur InventoryStateMachine.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6b

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6b

c. Cliquez sur Démarrer l’exécution.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6c

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6c

d. Une nouvelle boîte de dialogue d'exécution s’affiche, dans laquelle vous pouvez saisir une entrée pour votre machine d'état. Cette machine d’état ne dépend pas de l’entrée. Vous pouvez utiliser l’entrée par défaut. Cliquez sur Démarrer l’exécution.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6d

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6d

e. À mesure que votre flux de travail s'exécute, chaque étape changera de couleur dans le volet Flux de travail visuel. Attendez quelques secondes pour que l'exécution se termine. Ensuite, dans le volet Détails de l'exécution, cliquez sur Entrée et Résultat pour afficher les entrées et les résultats de votre flux de travail.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6e

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6e

f. Step Functions vous permet d'inspecter chaque étape de l'exécution de votre flux de travail, y compris les entrées et les résultats de chaque état. Cliquez sur chaque tâche de votre flux de travail et développez les champs Entrée et Résultat sous Détails de l'étape. Vous pouvez voir que la charge utile d’entrée dans votre machine d'état est transmise d'une étape à l'autre et que la charge utile est mise à jour à mesure que chaque étape se termine.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6f

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6f

g. Faites défiler jusqu'à la section Historique des événements d'exécution. Cliquez sur chaque étape d'exécution pour voir comment Step Functions a appelé SQS et a transmis les charges utiles entre les étapes.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6g

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6g

h. En fonction du résultat de votre machine d’état InventoryStateMachine, votre flux de travail peut se solder par une réussite ou un échec.
En situation réelle, vous pouvez décider de réexécuter la tâche ou de prendre d’autres mesures en fonction du message d’erreur que vous avez reçu.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6h

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-6h

Dans cette étape, vous allez résilier vos ressources associées à AWS Step Functions et AWS Lambda.
Important : il est conseillé de résilier les ressources qui ne sont pas utilisées de façon active afin de réduire les coûts. Des ressources non résiliées peuvent entraîner des frais.


a. En haut de la fenêtre de la console AWS Step Functions, cliquez sur Machines d'état.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7a

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7a

b. Dans la fenêtre Machines d'état, cliquez sur InventoryStateMachine, puis sélectionnez Supprimer. Confirmez l'action en sélectionnant Supprimer la machine d'état dans la boîte de dialogue. Votre machine d'état sera supprimée en l’espace d’une minute ou deux, une fois que Step Functions aura confirmé que toute exécution en cours est terminée.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7b

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7b

c. Vous devez ensuite supprimer vos fonctions Lambda. Cliquez sur Services dans le menu AWS Management Console, puis sélectionnez Lambda.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7c

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7c

d. Dans l'écran Fonctions, cliquez sur la fonction Inventaire créée pour ce didacticiel, sélectionnez Actions, puis Supprimer. Confirmez la suppression en cliquant de nouveau sur Supprimer.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7d

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7d

e. Vous devez enfin supprimer vos rôles IAM. Cliquez sur Services dans le menu AWS Management Console, puis sélectionnez IAM.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7e

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7e

f. Sélectionnez les rôles IAM créés pour ce didacticiel, puis cliquez sur Supprimer le rôle. Confirmez la suppression en cliquant sur Oui, supprimer dans la boîte de dialogue.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7f

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7f

g. Dans la liste de files d’attente, sélectionnez la file d’attente Commandes. Dans le menu déroulant Actions sur les files d’attente, sélectionnez Supprimer une file d’attente.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7g

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7g

h. La boîte de dialogue Supprimer les files d’attente s’ouvre. Vous pouvez supprimer votre file d’attente, même si elle contient encore des messages. Choisissez Oui, supprimer la file d’attente. La file d’attente est supprimée.

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7h

(cliquez pour zoomer)

tmt-orchestrer-les-microservices-basés-sur-des-files-d’attente-de-messages-sur-step-functions-7h

Vous avez orchestré un microservice dans le cloud basé sur une file d’attente de messages avec AWS Step Functions et Amazon SQS. Step Functions est idéal pour coordonner les ressources de votre application où la productivité et l’agilité sont des considérations essentielles.

Maintenant que vous avez appris à orchestrer des microservices basés sur des files d’attente, vous pouvez passer au didacticiel suivant où vous apprendrez comment utiliser Step Functions pour gérer les erreurs. Vous créerez une machine d'état avec les champs Réessayer et Intercepter qui répondent aux codes de réponse depuis une API fictive basée sur un type de message d'erreur, une méthode appelée gestion d'erreur de fonction.