Créez un exemple de modèle de rappel avec Amazon SQSSNS, Amazon et 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.

Créez un exemple de modèle de rappel avec Amazon SQSSNS, Amazon et Lambda

Cet exemple de projet montre comment avoir AWS Step Functions faites une pause pendant une tâche et attendez 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 (AmazonSQS).

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

  3. La SQS file d'attente Amazon 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 (AmazonSNS) 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 un jeton de tâche.

Pour plus d'informations sur la façon dont AWS Step Functions peut contrôler d'autres AWS services, voirIntégrer les services avec Step Functions.

Étape 1 : Création de la machine à états

  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. Choisissez Exécuter une démo pour créer un ready-to-deploy flux de travail en lecture seule ou choisissez Construire dessus pour créer une définition de machine à états modifiable sur laquelle vous pourrez vous appuyer pour la déployer ultérieurement.

    Cet exemple de projet déploie les ressources suivantes :

    • Une file d'attente de SQS messages Amazon.

    • Fonction Lambda qui appelle l'action Step FunctionsAPI. SendTaskSuccess

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

    • Un AWS Step Functions machine d'état

    • Relié AWS Identity and Access Management (IAM) rôles

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

    Graphique illustratif du flux de travail de gestion d'un traitement par lots.
  5. Choisissez Utiliser le modèle pour poursuivre votre sélection.

Les prochaines étapes dépendent de votre choix précédent :

  1. Exécuter une démonstration : vous pouvez passer en revue la machine d'état avant de créer un projet en lecture seule avec des ressources déployées par AWS CloudFormation à votre Compte AWS.

    Vous pouvez consulter la définition de la machine d'état et, lorsque vous êtes prêt, choisissez Déployer et exécuter pour déployer le projet et créer les ressources.

    Le déploiement peut prendre jusqu'à 10 minutes pour créer des ressources et des autorisations. Vous pouvez utiliser le lien Stack ID pour suivre les progrès dans AWS CloudFormation.

    Une fois le déploiement terminé, vous devriez voir votre nouvelle machine d'état dans la console.

  2. Tirez parti de cette information : vous pouvez revoir et modifier la définition du flux de travail. Vous devrez peut-être définir des valeurs pour les espaces réservés dans l'exemple de projet avant de tenter d'exécuter votre flux de travail personnalisé.

Note

Des frais standard peuvent s'appliquer pour les services déployés sur votre compte.

É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) Entrez un nom d'exécution personnalisé pour remplacer le nom par défaut généré.

      ASCIINon-noms et journalisation

      Step Functions accepte les noms des machines d'état, des exécutions, des activités et des étiquettes contenant des caractères autres que des ASCII caractères. Comme ces caractères ne fonctionneront pas avec Amazon CloudWatch, nous vous recommandons de n'utiliser que des ASCII caractères afin de pouvoir suivre les statistiques CloudWatch.

    2. (Facultatif) Dans la zone de saisie, entrez les valeurs d'entrée sous la formeJSON. Vous pouvez ignorer cette étape si vous lancez une démonstration.

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

    La console Step Functions vous dirige vers une page de détails d'exécution où vous pouvez choisir les états dans la vue graphique pour explorer les informations associées dans le Détails de l'étape volet.

    Par exemple, pour voir comment Step Functions a progressé dans le flux de travail et a reçu un rappel d'AmazonSQS, 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 « Notifier le succès », montrant cinq événements.

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 . 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); }); } };