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.

Ce didacticiel nécessite d'avoir un compte AWS.
Créez un compte gratuitAucuns 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.
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.
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.
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.
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 } } }
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.
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.
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.
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.
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.
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); }); } };
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.
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.
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.
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.
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.
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.
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.
En savoir plus
Explorer plus en détails
Découvrez AWS Step Functions