Itera un bucle con una función Lambda en Step Functions - 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 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 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. Seleccione 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 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 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

    Su máquina de estados debe estar en la misma ubicación AWS cuenta y región como función Lambda.

  2. Seleccione la plantilla en blanco.

  3. 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 } } }
  4. Sustituya el Iterator Resource campo ARN por el 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 ú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.

  6. En Tipo, acepta 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) 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.

  3. Seleccione Iniciar ejecución.

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

    El gráfico de la máquina de estados muestra el estado del iterador en azul, lo que indica 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.

    El gráfico de la máquina de estados muestra los estados Iterator y Done en verde para indicar que ambos se han realizado correctamente.