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 allez implémenter un modèle de conception qui utilise une machine à états et un AWS Lambda fonction permettant d'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 autre 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 count
index
, 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
-
Connectez-vous à la console Lambda
, puis choisissez Create function. -
Sur la page Create function, sélectionnez Author from scratch.
-
Dans la section Informations de base, configurez votre fonction Lambda comme suit :
-
Sous Nom de la fonction, saisissez
Iterator
. -
Dans le champ Runtime, sélectionnez Node.js.
-
Dans Modifier le rôle d'exécution par défaut, choisissez Créer un nouveau rôle avec des autorisations Lambda de base.
-
Sélectionnez Create function (Créer une fonction).
-
-
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
etstep
. Il incrémenteindex
de la valeur destep
et retourne ces valeurs, et la valeur booléennecontinue
. La valeur decontinue
esttrue
siindex
est inférieur àcount
. -
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
-
Sélectionnez Tester).
-
Dans la boîte de dialogue Configurer l'événement de test, entrez
TestIterator
dans la zone Nom de l'événement. -
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
lorsquetrue
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
-
Sélectionnez Create (Créer).
-
Choisissez Test pour tester votre fonction Lambda.
Les résultats du test sont affichés dans l'onglet Résultats de l'exécution.
-
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, lesindex
incréments de10
etcontinue
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 pourcount
index
, 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 votreIterator
fonction. -
ExampleWork
— Un talon pour les travaux à effectuer. Dans cet exemple, le flux de travail possède unPass
é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 :
-
Ouvrez la console Step Functions
, puis choisissez Create a state machine. Important
Votre machine à états doit être dans le même AWS compte et région en tant que fonction Lambda.
-
Sélectionnez le modèle vide.
-
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 } } } -
Remplacez le
Iterator Resource
champ par celui que vous avez créé précédemment ARN pour votre fonctionIterator
Lambda. -
Sélectionnez Config, puis entrez un nom pour votre machine d'état, tel que
.IterateCount
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 AWS Région, et ne doit 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. 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.
-
-
Pour Type, acceptez la valeur par défaut Standard. Pour Autorisations, choisissez Créer un nouveau rôle.
-
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.
-
Sur la IterateCountpage, choisissez Démarrer l'exécution.
-
(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.
-
Choisissez Démarrer une exécution.
Une nouvelle exécution de votre machine d'état commence, montrant votre exécution 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.