Exemple de modèle de rappel (Amazon SQS, Amazon SNS, Lambda) - AWS Step Functions

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemple de modèle de rappel (Amazon SQS, Amazon SNS, Lambda)

Cet exemple de projet montre comment faire une AWS Step Functions pause pendant une tâche et attendre qu'un processus externe renvoie un jeton de tâche généré au démarrage de la tâche.

Lorsque cet exemple de projet est déployé et qu'une exécution est démarrée, les étapes suivantes se produisent.

  1. Step Functions transmet un message contenant un jeton de tâche à une file d'attente Amazon Simple Queue Service (Amazon SQS).

  2. Step Functions fait ensuite une pause en attendant que ce jeton soit renvoyé.

  3. La file d'attente Amazon SQS déclenche une AWS Lambda fonction qui appelle SendTaskSuccessavec le même jeton de tâche.

  4. Lorsque le jeton de la tâche est reçu, le flux de travail se poursuit.

  5. La "Notify Success" tâche publie un message Amazon Simple Notification Service (Amazon SNS) indiquant que le rappel a été reçu.

Pour savoir comment implémenter le modèle de rappel dans Step Functions, consultezAttendre un rappel avec le jeton de tâche.

Pour plus d'informations sur la manière de AWS Step Functions contrôler d'autres AWS services, consultezUtilisation AWS Step Functions avec d'autres services.

Étape 1 : créer la machine à états et provisionner les ressources

  1. Ouvrez la console Step Functions et choisissez Create state machine.

  2. Tapez Callback pattern example dans la zone de recherche, puis choisissez Exemple de modèle de rappel dans les résultats de recherche renvoyés.

  3. Choisissez Next (Suivant) pour continuer.

  4. Step Functions répertorie les Services AWS éléments utilisés dans l'exemple de projet que vous avez sélectionné. Il montre également un graphique de flux de travail pour l'exemple de projet. Déployez ce projet sur votre site Compte AWS ou utilisez-le comme point de départ pour créer vos propres projets. Selon la façon dont vous souhaitez procéder, choisissez Exécuter une démo ou Construire à partir de celle-ci.

    Cet exemple de projet déploie les ressources suivantes :

    • Une file d'attente de messages Amazon SQS.

    • Fonction Lambda qui appelle l'action d'API Step Functions. SendTaskSuccess

    • Rubrique Amazon SNS signalant le succès ou l'échec d'une tâche et indiquant si le flux de travail peut se poursuivre ou non.

    • Une machine AWS Step Functions étatique

    • Rôles associés AWS Identity and Access Management (IAM)

    L'image suivante montre le graphique du flux de travail pour l'exemple de projet d'exemple de modèle de rappel :

    Graphique du flux de travail de l'exemple de projet Gérer un travail par lots.
  5. Choisissez Utiliser le modèle pour poursuivre votre sélection.

  6. Effectuez l’une des actions suivantes :

    • Si vous avez sélectionné Build on it, Step Functions crée le prototype de flux de travail pour l'exemple de projet que vous avez sélectionné. Step Functions ne déploie pas les ressources répertoriées dans la définition du flux de travail.

      Dans Workflow StudioMode de conception, glissez-déposez les états depuis le Navigateur d'états pour continuer à créer votre prototype de flux de travail. Vous pouvez également passer à un éditeur de code intégré similaire à VS Code pour mettre à jour la définition Amazon States Language (ASL) de votre machine à états dans la console Step Functions. Mode code Pour plus d'informations sur l'utilisation de Workflow Studio pour créer vos machines d'état, consultezUtilisation de Workflow Studio.

      Important

      N'oubliez pas de mettre à jour l'espace réservé Amazon Resource Name (ARN) pour les ressources utilisées dans l'exemple de projet avant d'exécuter votre flux de travail.

    • Si vous avez sélectionné Run a demo, Step Functions crée un exemple de projet en lecture seule qui utilise un AWS CloudFormation modèle pour déployer les AWS ressources répertoriées dans ce modèle sur votre. Compte AWS

      Astuce

      Pour afficher la définition de la machine à états de l'exemple de projet, choisissez Code.

      Lorsque vous êtes prêt, choisissez Déployer et exécuter pour déployer l'exemple de projet et créer les ressources.

      La création de ces ressources et des autorisations IAM associées peut prendre jusqu'à 10 minutes. Pendant le déploiement de vos ressources, vous pouvez ouvrir le lien CloudFormation Stack ID pour voir quelles ressources sont mises en service.

      Une fois que toutes les ressources de l'exemple de projet ont été créées, vous pouvez voir le nouvel exemple de projet répertorié sur la page State machines.

      Important

      Des frais standard peuvent s'appliquer pour chaque service utilisé dans le CloudFormation modèle.

Étape 2 : Exécuter la machine à états

  1. Sur la page State machines, choisissez votre exemple de projet.

  2. Sur la page d'exemple de projet, choisissez Démarrer l'exécution.

  3. Dans la boîte de dialogue Démarrer l'exécution, procédez comme suit :

    1. (Facultatif) Pour identifier votre exécution, vous pouvez lui donner un nom dans le champ Nom. Par défaut, Step Functions génère automatiquement un nom d'exécution unique.

      Note

      Step Functions vous permet de créer des noms pour les machines d'état, les exécutions et les activités, ainsi que des étiquettes contenant des caractères non ASCII. Ces noms non ASCII ne fonctionnent pas avec Amazon. CloudWatch Pour être sûr de pouvoir suivre CloudWatch les métriques, choisissez un nom qui utilise uniquement des caractères ASCII.

    2. (Facultatif) Dans la zone de saisie, entrez les valeurs d'entrée au format JSON pour exécuter votre flux de travail.

      Si vous avez choisi d'exécuter une démo, vous n'avez pas besoin de fournir d'entrée d'exécution.

      Note

      Si le projet de démonstration que vous avez déployé contient des données d'entrée d'exécution préremplies, utilisez ces entrées pour exécuter la machine à états.

    3. Choisissez Start execution (Démarrer l'exécution).

    4. La console Step Functions vous dirige vers une page intitulée avec votre ID d'exécution. Cette page est connue sous le nom de page Détails de l'exécution. Sur cette page, vous pouvez consulter les résultats de l'exécution au fur et à mesure que l'exécution progresse ou une fois celle-ci terminée.

      Pour consulter les résultats de l'exécution, choisissez des états individuels dans la vue graphique, puis choisissez les onglets individuels du Détails de l'étape volet pour afficher les détails de chaque état, y compris les entrées, les sorties et la définition respectivement. Pour plus de détails sur les informations d'exécution que vous pouvez consulter sur la page Détails de l'exécution, voirPage de détails d'exécution — Vue d'ensemble de l'interface.

    Par exemple, pour voir comment Step Functions a progressé dans le flux de travail et a reçu un rappel d'Amazon SQS, consultez les entrées du tableau Events. L'image suivante montre le résultat d'exécution de l'étape Notify Success. Il affiche également les cinq premiers événements de l'historique des événements d'exécution. Développez chaque événement pour afficher plus de détails sur cet événement.

    Extrait du résultat d'exécution de l'étape Notify Success sélectionnée dans la vue graphique. L'image montre également un extrait de l'historique des événements d'exécution pour l'exemple de projet d'exemple de modèle de rappel.

Exemple de rappel Lambda

Pour voir comment les composants de cet exemple de projet fonctionnent ensemble, consultez les ressources qui ont été déployées dans votre AWS compte. Par exemple, voici la fonction Lambda qui appelle Step Functions avec le jeton de tâche.

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_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); }); } };