Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Itera un bucle con una función Lambda en Step Functions
En este tutorial, implementará un patrón de diseño que utiliza una máquina de estados y un AWS Lambda función para iterar un bucle un número específico de veces.
Utilice este patrón de diseño cada vez que necesite realizar un seguimiento del número de bucles en una máquina de estado. Esta implementación puede ayudarle a desglosar tareas grandes o ejecuciones de ejecución prolongada en trozos más pequeños o finalizar una ejecución después de un número específico de eventos. Puede usar una implementación similar para finalizar y reiniciar periódicamente una ejecución prolongada a fin de evitar sobrepasar las cuotas de servicio para AWS Step Functions, AWS Lambda, u otro AWS servicios.
Antes de empezar, consulte el tutorial Creación de una máquina de estado de Step Functions que utilice Lambda para asegurarse de que está familiarizado con el uso conjunto de Lambda y Step Functions.
Paso 1: Crear una función de Lambda para iterar un recuento
Al utilizar una función de Lambda puede realizar un seguimiento del número de iteraciones de un bucle en su máquina de estado. La función de Lambda siguiente recibe valores de entrada de count
, index
y step
. Devuelve estos valores con un valor de index
actualizado y un valor booleano denominado continue
. La función de Lambda establece continue
en true
si index
es menor que count
.
A continuación, la máquina de estado implementa un estado Choice
que ejecuta una lógica de aplicación si continue
es true
o finaliza si es false
.
Para crear la función de Lambda
-
Inicie sesión en la consola de Lambda
y, a continuación, elija Crear función. -
En la página Crear función, elija Diseñar desde cero.
-
En la sección Información básica, configure la función de Lambda de la siguiente manera:
-
En Nombre de la función, introduzca
Iterator
. -
En Runtime (Tiempo de ejecución), elija Node.js.
-
En Cambiar el rol de ejecución predeterminado, elija Crear un nuevo rol con permisos básicos de Lambda.
-
Seleccione Crear función.
-
-
Copie el siguiente código de la función Lambda en el código fuente.
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 }) }
Este código acepta los valores de entrada de
count
,index
ystep
. Incrementaindex
en el valor destep
y devuelve estos valores y el valor booleano decontinue
. El valor decontinue
estrue
siindex
es menor quecount
. -
Elija Implementar.
Paso 2: Probar la función de Lambda
Ejecute su función de Lambda con valores numéricos para verla en acción. Puede proporcionar valores de entrada para la función Lambda que imiten una iteración.
Para probar su función de Lambda
-
Seleccione Probar.
-
En el cuadro de diálogo Configurar un evento de prueba, introduzca
TestIterator
en el cuadro Nombre del evento. -
Sustituya los datos de ejemplo por lo siguiente.
{ "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }
Estos valores imitan los que procederían de la máquina de estado durante una iteración. La función Lambda incrementará el índice y
true
regresarácontinue
cuando el índice sea inferior a.count
Para esta prueba, el índice ya se ha incrementado a5
. La prueba se incrementará6
y seindex
establecerá en.continue
true
-
Seleccione Crear.
-
Elija Probar para probar la función Lambda.
Los resultados de la prueba se muestran en la pestaña Resultados de la ejecución.
-
Para ver los resultados de la ejecución, elija la pestaña Salida.
{ "index": 6, "step": 1, "count": 10, "continue": true }
nota
Si configura
9
y vuelveindex
a realizar la prueba, losindex
incrementoscontinue
serán y serán.10
false
Paso 3: Crear una máquina de estado
Antes de salir de la consola Lambda...
Copie la función Lambda. ARN Pégala en una nota. Lo necesitará en el siguiente paso.
A continuación, creará una máquina de estados con los siguientes estados:
-
ConfigureCount
— Establece los valores por defecto paracount
index
, ystep
. -
Iterator
— Hace referencia a la función Lambda que creó anteriormente y transfiere los valores configurados en.ConfigureCount
-
IsCountReached
— Un estado de elección que continúa el ciclo o pasa alDone
estado, en función del valor devuelto por laIterator
función. -
ExampleWork
— Un resumen del trabajo que hay que hacer. En este ejemplo, el flujo de trabajo tiene unPass
estado, pero en una solución real, lo más probable es que utilices unTask
. -
Done
— Estado final de su flujo de trabajo.
Para crear la máquina de estados en la consola:
-
Abra la consola de Step Functions
y elija Crear una máquina de estado. importante
Su máquina de estados debe estar en la misma ubicación AWS cuenta y región como función Lambda.
-
Seleccione la plantilla en blanco.
-
En el panel de códigos, pegue JSON lo siguiente que define la máquina de estados.
Para obtener más información acerca del Amazon States Language, consulte Estructura de las máquinas de estado.
{ "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 } } } -
Sustituya el
Iterator Resource
campo ARN por el de la funciónIterator
Lambda que creó anteriormente. -
Seleccione Config e introduzca un nombre para su máquina de estado, como
.IterateCount
nota
Los nombres de máquinas de estado, ejecuciones y tareas de actividad no deben superar los 80 caracteres. Estos nombres deben ser únicos para su cuenta y AWS Región y no debe contener ninguno de los siguientes elementos:
-
Espacios en blanco
-
Caracteres comodín (
? *
) -
Caracteres entre corchetes (
< > { } [ ]
) -
Caracteres especiales (
" # % \ ^ | ~ ` $ & , ; : /
) -
Caracteres de control (
\\u0000
-\\u001f
o\\u007f
-\\u009f
).
Step Functions acepta nombres para máquinas de estados, ejecuciones, actividades y etiquetas que no contengan ASCII caracteres. Como estos personajes no funcionan con Amazon CloudWatch, te recomendamos que utilices solo ASCII caracteres para poder hacer un seguimiento de las métricas CloudWatch.
-
-
En Tipo, acepta el valor predeterminado de Estándar. En Permisos, elija Crear nuevo rol.
-
Seleccione Crear y, a continuación, confirme la creación de los roles.
Paso 4: Iniciar una nueva ejecución
Después de crear la máquina de estado, puede iniciar una ejecución.
-
En la IterateCountpágina, elija Iniciar la ejecución.
-
(Opcional) Introduzca un nombre de ejecución personalizado para anular el valor predeterminado generado.
ASCIINombres no identificables y registro
Step Functions acepta nombres para máquinas de estados, ejecuciones, actividades y etiquetas que no contengan ASCII caracteres. Como estos personajes no funcionan con Amazon CloudWatch, te recomendamos que utilices solo ASCII caracteres para poder hacer un seguimiento de las métricas CloudWatch.
-
Seleccione Iniciar ejecución.
Se inicia una nueva ejecución de la máquina de estado, mostrando la ejecución en funcionamiento.
La ejecución se incrementa por pasos y realiza el seguimiento del contador mediante la función de Lambda. En cada iteración, realiza el trabajo de ejemplo al que se hace referencia en el estado
ExampleWork
de la máquina de estado.Cuando el recuento alcanza el número especificado en el estado
ConfigureCount
de la máquina de estado, la ejecución termina las iteraciones y finaliza.