Itera un bucle con Lambda - AWS Step Functions

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 Lambda

En este tutorial, implementará un patrón de diseño que utiliza una maquina de estado y una función de AWS Lambda para recorrer en iteración 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 de AWS Step Functions AWS Lambda, o de otros 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 trueo finaliza si es false.

Para crear la función de Lambda

  1. Inicie sesión en la consola de Lambda y, a continuación, elija Crear función.

  2. En la página Crear función, elija Diseñar desde cero.

  3. En la sección Información básica, configure la función de Lambda de la siguiente manera:

    1. En Nombre de la función, introduzca Iterator.

    2. En Runtime (Tiempo de ejecución), elija Node.js.

    3. En Cambiar el rol de ejecución predeterminado, elija Crear un nuevo rol con permisos básicos de Lambda.

    4. Elija Crear función.

  4. 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 y step. Incrementa index en el valor de step y devuelve estos valores y el valor booleano de continue. El valor de continue es true si index es menor que count.

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

  1. Seleccione Probar.

  2. En el cuadro de diálogo Configurar un evento de prueba, introduzca TestIterator en el cuadro Nombre del evento.

  3. 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 a 5. La prueba se incrementará 6 y se index establecerá en. continue true

  4. Seleccione Crear.

  5. Elija Probar para probar la función Lambda.

    Los resultados de la prueba se muestran en la pestaña Resultados de la ejecución.

  6. 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 vuelve index a realizar la prueba, los index incrementos continue serán y serán. 10 false

Paso 3: Crear una máquina de estado

Antes de salir de la consola Lambda...

Copie el ARN de la función Lambda. 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 para countindex, 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 al Done estado, en función del valor devuelto por la Iterator función.

  • ExampleWork— Un resumen del trabajo que hay que hacer. En este ejemplo, el flujo de trabajo tiene un Pass 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:

  1. Abra la consola de Step Functions y elija Crear una máquina de estado.

    importante

    La máquina de estados debe estar en la misma AWS cuenta y región que la función Lambda.

  2. Seleccione la plantilla en blanco.

  3. En el panel Código, pegue el siguiente JSON 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 } } }
  4. Sustituya el Iterator Resource campo por el ARN de la función Iterator Lambda que creó anteriormente.

  5. Seleccione Config e introduzca un nombre para su máquina de estado, comoIterateCount.

    nota

    Los nombres de máquinas de estado, ejecuciones y tareas de actividad no deben superar los 80 caracteres. Estos nombres deben ser exclusivos para su cuenta y AWS región, y no deben 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).

    Si la máquina de estado es de tipo rápido, puede proporcionar el mismo nombre a varias ejecuciones de la máquina de estado. Step Functions genera un ARN de ejecución único para cada ejecución de una máquina de estado rápida, incluso aunque varias ejecuciones tengan el mismo nombre.

    Step Functions le permite crear nombres para máquinas de estados, ejecuciones y actividades, así como etiquetas que contienen caracteres no ASCII. Estos nombres que no son ASCII no funcionan con Amazon. CloudWatch Para asegurarse de que puede realizar un seguimiento de CloudWatch las métricas, elija un nombre que utilice únicamente caracteres ASCII.

  6. En Tipo, acepte el valor predeterminado de Estándar. En Permisos, elija Crear nuevo rol.

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

  1. En la IterateCountpágina, elija Iniciar la ejecución.

  2. (Opcional) Para identificar la ejecución, puede especificar un nombre en el cuadro Nombre. De forma predeterminada, Step Functions genera automáticamente un nombre de ejecución único.

    nota

    Step Functions le permite crear nombres para máquinas de estados, ejecuciones y actividades, así como etiquetas que contienen caracteres no ASCII. Estos nombres que no son ASCII no funcionan con Amazon. CloudWatch Para asegurarse de que puede realizar un seguimiento de CloudWatch las métricas, elija un nombre que utilice únicamente caracteres ASCII.

  3. Seleccione Iniciar ejecución.

    Se inicia una nueva ejecución de la máquina de estado, mostrando la ejecución en funcionamiento.

    Vista gráfica de máquina de estados, que muestra el estado del iterador en azul para indicar su estado en progreso.

    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.

    Vista gráfica de la máquina de estados, que muestra el estado del iterador y el estado Listo en verde para indicar que ambos se han realizado correctamente.