Itérer une boucle avec 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.

Itérer une boucle avec Lambda

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. Choisissez 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 TestIterator le 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. Choisissez 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 l'ARN de la fonction Lambda. 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 :

  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 le code JSON suivant qui définit 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 l'ARN de votre fonction Iterator Lambda que vous avez créée précédemment.

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

    Si votre machine à états est de type Express, vous pouvez attribuer le même nom à plusieurs exécutions de la machine à états. Step Functions génère un ARN d'exécution unique pour chaque exécution automatique d'Express State, même si plusieurs exécutions portent le même nom.

    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.

  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 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.

  3. Choisissez Démarrer une exécution.

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

    Vue graphique de la machine d'état, montrant l'état de l'itérateur en bleu pour indiquer 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.

    Vue graphique de la machine à états, montrant l'état de l'itérateur et l'état terminé en vert pour indiquer que les deux ont réussi.