Itérer une boucle avec une fonction Lambda dans Step Functions - 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.

Itérer une boucle avec une fonction Lambda dans Step Functions

Dans ce didacticiel, vous implémentez un modèle de conception qui utilise une machine d'état et une fonction AWS Lambda pour itérer une boucle un certain nombre de fois.

Utilisez ce modèle de conception chaque fois que vous avez besoin d'effectuer le suivi du nombre de boucles dans une machine d'état. Cette implémentation peut vous aider à diviser des tâches volumineuses ou des exécutions de longue durée en fragments plus petits, ou d'arrêter une exécution après un nombre spécifique d'événements. Vous pouvez utiliser une implémentation similaire pour arrêter et redémarrer périodiquement une exécution de longue durée afin d'éviter de dépasser les quotas de service pour AWS Step Functions AWS Lambda, ou pour d'autres AWS services.

Avant de commencer, suivez le Création d'une machine d'état Step Functions utilisant Lambda didacticiel pour vous assurer que vous êtes familiarisé avec l'utilisation conjointe de Lambda et de Step Functions.

Étape 1 : créer une fonction Lambda pour itérer un décompte

En utilisant une fonction Lambda, vous pouvez suivre le nombre d'itérations d'une boucle dans votre machine à états. La fonction Lambda suivante reçoit les valeurs d'entrée pour countindex, et. step Puis, elle retourne ces valeurs avec un index mis à jour et une valeur booléenne nommée continue. La fonction Lambda est définie continue sur true si le index est inférieur à. count

Votre machine d'état implémente alors un état Choice qui exécute une certaine logique d'application si continue a la valeur true, ou s'arrête si la valeur est false.

Pour créer la fonction Lambda

  1. Connectez-vous à la console Lambda, puis choisissez Create function.

  2. Sur la page Create function, sélectionnez Author from scratch.

  3. Dans la section Informations de base, configurez votre fonction Lambda comme suit :

    1. Sous Nom de la fonction, saisissez Iterator.

    2. Dans le champ Runtime, sélectionnez Node.js.

    3. Dans Modifier le rôle d'exécution par défaut, choisissez Créer un nouveau rôle avec des autorisations Lambda de base.

    4. Sélectionnez Create function (Créer une fonction).

  4. Copiez le code suivant pour la fonction Lambda dans le code source.

    export const handler = function (event, context, callback) { let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index = index + step callback(null, { index, step, count, continue: index < count }) }

    Le code accepte les valeurs d'entrée pour count, index et step. Il incrémente index de la valeur de step et retourne ces valeurs, et la valeur booléenne continue. La valeur de continue est true si index est inférieur à count.

  5. Choisissez Deploy (Déployer).

Étape 2 : tester la fonction Lambda

Exécutez votre fonction Lambda avec des valeurs numériques pour la voir fonctionner. Vous pouvez fournir des valeurs d'entrée pour votre fonction Lambda qui imitent une itération.

Pour tester votre fonction Lambda

  1. Sélectionnez Tester).

  2. Dans la boîte de dialogue Configurer l'événement de test, entrez le nom de l'événement TestIterator dans la zone Nom de l'événement.

  3. Remplacez les données de l'exemple par les suivantes.

    { "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }

    Ces valeurs simulent ce qui provient de votre machine d'état au cours d'une itération. La fonction Lambda incrémente l'indice et renvoie continue lorsque true l'indice est inférieur à. count Pour ce test, l'index a déjà été incrémenté à 5. Le test sera incrémenté index 6 et réglé surcontinue. true

  4. Sélectionnez Create (Créer).

  5. Choisissez Test pour tester votre fonction Lambda.

    Les résultats du test sont affichés dans l'onglet Résultats de l'exécution.

  6. Cliquez sur l'onglet Résultats de l'exécution pour voir le résultat.

    { "index": 6, "step": 1, "count": 10, "continue": true }
    Note

    Si vous réglez index 9 et testez à nouveau, les index incréments de 10 et continue serontfalse.

Étape 3 : Création d'une machine d'état

Avant de quitter la console Lambda...

Copiez la fonction Lambda. ARN Collez-le dans une note. Vous en aurez besoin à l’étape suivante.

Ensuite, vous allez créer une machine à états avec les états suivants :

  • ConfigureCount— Définit les valeurs par défaut pour countindex, etstep.

  • Iterator— Fait référence à la fonction Lambda que vous avez créée précédemment, en transmettant les valeurs configurées dans. ConfigureCount

  • IsCountReached— Un état de choix qui continue la boucle ou passe à Done l'état, en fonction de la valeur renvoyée par votre Iterator fonction.

  • ExampleWork— Un talon pour les travaux à effectuer. Dans cet exemple, le flux de travail possède un Pass état, mais dans une solution réelle, vous utiliseriez probablement unTask.

  • Done— État final de votre flux de travail.

Pour créer la machine à états dans la console, procédez comme suit :

  1. Ouvrez la console Step Functions, puis choisissez Create a state machine.

    Important

    Votre machine d'état doit se trouver dans le même AWS compte et dans la même région que votre fonction Lambda.

  2. Sélectionnez le modèle vide.

  3. Dans le volet Code, collez JSON ce qui suit pour définir la machine à états.

    Pour plus d'informations sur le langage Amazon States, consultez State Machine Structure.

    { "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "Done": { "Type": "Pass", "End": true } } }
  4. Remplacez le Iterator Resource champ par celui que vous avez créé précédemment ARN pour votre fonction Iterator Lambda.

  5. Sélectionnez Config, puis entrez un nom pour votre machine d'état, tel queIterateCount.

    Note

    Les noms des machines d'état, des exécutions et des tâches d'activité ne doivent pas dépasser 80 caractères. Ces noms doivent être uniques pour votre compte et votre AWS région, et ne doivent contenir aucun des éléments suivants :

    • Espace blanc

    • Caractères génériques () ? *

    • Caractères entre crochets (< > { } [ ])

    • Caractères spéciaux (" # % \ ^ | ~ ` $ & , ; : /)

    • Caractères de contrôle (\\u0000- \\u001f ou \\u007f -\\u009f).

    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. Étant donné que les noms ne contenant pas de ASCII caractères ne fonctionneront pas avec Amazon CloudWatch, nous vous recommandons de n'utiliser que ASCII des caractères afin de pouvoir suivre les statistiques. CloudWatch

  6. Pour Type, acceptez la valeur par défaut Standard. Pour Autorisations, choisissez Créer un nouveau rôle.

  7. Choisissez Créer, puis Confirmez les créations de rôles.

Étape 4 : Démarrage d'une nouvelle exécution

Une fois que vous avez créé votre machine d'état, vous pouvez lancer une exécution.

  1. Sur la IterateCountpage, choisissez Démarrer l'exécution.

  2. (Facultatif) Pour identifier votre exécution, vous pouvez spécifier un nom ou utiliser le nom d'exécution généré par défaut.

    Note

    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. Étant donné que les noms ne contenant pas de ASCII caractères ne fonctionneront pas avec Amazon CloudWatch, nous vous recommandons de n'utiliser que ASCII des caractères afin de pouvoir suivre les statistiques. CloudWatch

  3. Choisissez Démarrer une exécution.

    Une nouvelle exécution de votre machine d'état commence, montrant votre exécution en cours.

    Graphique de la machine d'état montrant l'état de l'itérateur en bleu indiquant l'état en cours.

    L'exécution s'incrémente par étapes, en suivant le nombre à l'aide de votre fonction Lambda. Sur chaque itération, elle exécute l'exemple de travail référencé dans l'état ExampleWork de votre machine d'état.

    Une fois que le compte atteint le nombre configuré dans l'état ConfigureCount de votre machine d'état, l'exécution quitte l'itération et prend fin.

    Graphique de la machine d'état montrant l'état de l'itérateur et l'état terminé en vert pour indiquer que les deux ont réussi.