Creating a Step Functions State Machine That Uses Lambda - AWS Step Functions

Si proporcionásemos una traducción de la versión en inglés de la guía, prevalecerá la versión en inglés de la guía si hubiese algún conflicto. La traducción se proporciona mediante traducción automática.

Creating a Step Functions State Machine That Uses Lambda

En este tutorial, va a crear una máquina de estado de AWS Step Functions que utiliza una función de AWS Lambda para implementar un estado Task. Un estado Task realiza una sola unidad de trabajo.

Lambda es adecuado para la implementación Task estados, porque Lambda funciones stateless (tienen una relación de entrada-salida predecible), fácil de escribir y no requieren implementar código a una instancia de servidor. Puede escribir código en la Consola de administración de AWS o en el editor de su elección; AWS se encarga de proporcionar un entorno informático para su función y de ejecutarlo.

Step 1: Create an IAM Role for Lambda

Tanto AWS Lambda como AWS Step Functions pueden ejecutar código y tener acceso a los recursos de AWS (por ejemplo, los datos almacenados en los buckets de Amazon S3). Para mantener la seguridad, debe conceder a Lambda y a Step Functions acceso a esos recursos.

Lambda requiere que se asigne un rol de AWS Identity and Access Management (IAM) al crear una función de Lambda, del mismo modo que Step Functions requiere que se asigne un rol de IAM al crear una máquina de estado.

La consola de IAM se utiliza para crear un rol vinculado al servicio.

Para crear un rol (consola)

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación de la consola de IAM, elija Roles (Funciones). A continuación, elija Create role.

  3. Elija el tipo de rol AWS Service (Servicio de AWS) y, a continuación, elija Lambda.

  4. Elija el caso de uso Lambda. Los casos de uso son definidos por el servicio de modo tal que ya incluyen la política de confianza exigida por el servicio mismo. A continuación, elija Next (Siguiente). Permissions (Permisos)

  5. Elija una o varias políticas de permisos para asociarlas al rol (por ejemplo, AWSLambdaBasicExecutionRole). Consulte Modelo de permisos de AWS Lambda.

    Seleccione la casilla junto a la política que asigna los permisos que desea que tenga el rol y, a continuación, elija Siguiente: Review (Revisar)

  6. Escriba un Role name.

  7. (Opcional) En Role description, edite la descripción del nuevo rol vinculado al servicio.

  8. Revise el rol y, a continuación, seleccione Create role (Crear rol).

Step 2: Create a Lambda Function

Su función de Lambda recibe una entrada (un nombre) y devuelve un saludo que incluye el valor de entrada.

importante

Asegúrese de que la función de Lambda se encuentra en la misma cuenta y región de AWS que la máquina de estado.

  1. Abra la consola de Lambda y elija Create a function (Crear una función).

  2. En la sección Create function (Crear función), elija Author from scratch (Crear desde cero).

  3. En la sección Basic information (Información básica), configure la función de Lambda:

    1. En Function name (Nombre de función), escriba HelloFunction.

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

    3. En Role (Rol), seleccione Choose an existing role (Elegir un rol existente).

    4. En Existing role (Rol existente), seleccione el rol de Lambda que creó anteriormente.

      nota

      Si el rol de IAM que creó no aparece en la lista, es posible que necesite unos minutos para que se propague a Lambda.

    5. Elija Create function (Crear función).

      Una vez creada la función de Lambda, tome nota de su Nombre de recurso de Amazon (ARN) que aparece en la esquina superior derecha de la página, como se muestra en el ejemplo.

      arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
  4. Copie el siguiente código para el Lambda en el Código de función sección del HelloFunction página.

    exports.handler = (event, context, callback) => { callback(null, "Hello, " + event.who + "!"); };

    Este código crea un saludo utilizando el campo who de los datos de entrada, proporcionados por el objeto event pasado a la función. Los datos de entrada de esta función se agregan más tarde, cuando se inicia una nueva ejecución. El método callback devuelve el saludo creado a partir de su función.

  5. Seleccione Save.

Step 3: Test the Lambda Function

Pruebe la función de Lambda para verla en acción.

  1. En Select a test event (Seleccionar un evento de prueba), elija Configure test event (Configurar evento de prueba). En Event name (Nombre del evento), escriba HelloFunction.

  2. Sustituya los datos de ejemplo por lo siguiente.

    { "who": "AWS Step Functions" }

    La entrada "who" se corresponde con el campo event.who de su función de Lambda y completa el saludo. Utilizará los mismos datos de entrada cuando ejecute la función como una tarea de Step Functions.

  3. Seleccione Create (Crear).

  4. En el hellofunción página, Prueba tu Lambda función utilizando los datos nuevos.

    Los resultados de la prueba se muestran en la parte superior de la página. Amplíe Details (Detalles) para ver la salida.

Step 4: Create a State Machine

Utilice la consola de Step Functions para crear una máquina de estado con un estado Task. Agregue una referencia a la función de Lambda en el estado Task. La función Lambda se invoca cuando una ejecución de la máquina de estado alcanza el estado Task.

  1. Abra la consola de Step Functions y elija Create a state machine (Crear una máquina de estado).

  2. En la página Define a state machine (Definir una máquina de estado), elija Author with code snippets (Crear con fragmentos de código). En Type (Tipo), seleccione Standard (Estándar). En Name for your state machine (Nombre para la máquina de estado), escriba un nombre, por ejemplo, LambdaStateMachine.

    nota

    Los nombres de las máquinas de estado, las ejecuciones y las actividades deben tener entre 1 y 80 caracteres, deben ser únicos en la cuenta y la región de AWS, y no deben incluir ninguno de los caracteres siguientes:

    • Espacios en blanco

    • Caracteres comodín (? *)

    • Caracteres de corchetes (< > { } [ ])

    • Caracteres especiales (: ; , \ | ^ ~ $ # % & ` ")

    • Caracteres de control (\\u0000 - \\u001f o \\u007f - \\u009f).

    Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch elija un nombre que solo use caracteres ASCII.

  3. En el panel State machine definition (Definición de máquina de estado), agregue la siguiente definición de máquina de estado utilizando el ARN de la función de Lambda que creó anteriormente, como se muestra en el siguiente ejemplo.

    { "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }

    Esta es una descripción de la máquina de estado realizada mediante el Lenguaje de estados de Amazon. Define un único Task estado nombrado HelloWorld. Para obtener más información, consulte Estructura de la máquina estatal.

    nota

    También puede configurar Retry para los estados Task. Utilice la práctica recomendada de asegurarse de que el código de producción controle las excepciones del servicio de Lambda (Lambda.ServiceException y Lambda.SdkClientException). Para obtener más información, consulte lo siguiente: .

    Seleccione Next (Siguiente).

  4. Cree o especifique un rol de IAM:

    • Para crear un rol de IAM para Step Functions, seleccione Create an IAM role (Crear un rol de IAM) y rellene el campo Name (Nombre) para el rol.

    • Si previamente creó un rol de IAM con los permisos correctos para su máquina de estado, seleccione Choose an existing IAM role (Elegir un rol de IAM existente). Seleccione un rol en la lista o proporcione el ARN de un rol.

    nota

    Si elimina el rol de IAM que crea Step Functions, Step Functions no podrá volver a crearlo más adelante. Asimismo, si modifica el rol (por ejemplo, eliminando Step Functions de la entidad principal de la política de IAM), Step Functions no podrá restablecer su configuración original más adelante.

  5. Seleccione Next (Siguiente).

Step 5: Start a New Execution

Después de crear la máquina de estado, inicie una ejecución.

  1. En la página LambdaStateMachine página, elegir Iniciar ejecución.

    Aparece la página New execution.

  2. (Opcional) Para ayudar a identificar la ejecución, puede especificar un ID en el recuadro Enter an execution name (Especifique un nombre de ejecución). Si no especifica un ID, Step Functions genera un ID único automáticamente.

    nota

    Step Functions le permite crear una máquina de estado, una ejecución y nombres de actividad que contengan caracteres no ASCII. Estos nombres no ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede realizar un seguimiento de las métricas de CloudWatch elija un nombre que solo use caracteres ASCII.

  3. En el área de entrada de ejecución, sustituya los datos de ejemplo por lo siguiente.

    { "who" : "AWS Step Functions" }

    "who" es el nombre de clave que su función de Lambda utiliza para obtener el nombre de la persona a la que se saluda.

  4. Elija Start Execution (Iniciar ejecución).

    Se inicia una nueva ejecución de la máquina de estado y aparece una nueva página que muestra la ejecución en funcionamiento.

  5. Para ver los resultados de la ejecución, expanda la sección Output (Salida) en la sección Execution details (Detalles de la ejecución).