Integrar AWS Lambda en una máquina de estados de Step Functions con Amazon SQS y Amazon SNS - 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.

Integrar AWS Lambda en una máquina de estados de Step Functions con Amazon SQS y Amazon SNS

Este ejemplo de proyecto demuestra cómo integrar AWS Lambda funciones en las máquinas de estado Step Functions.

En este proyecto, Step Functions utiliza funciones de Lambda para consultar el precio de una acción y determinar una recomendación de compra o venta. A continuación, el usuario recibe esta recomendación y puede decidir si compra o vende las acciones. El resultado de la operación se devuelve utilizando un SNS tema.

Para obtener más información acerca de las integraciones de servicios de Step Functions, consulte los temas siguientes.

nota

Este proyecto de muestra puede generar cargos.

Para nuevos AWS para los usuarios, hay disponible un nivel de uso gratuito. En esta capa, los servicios son gratuitos por debajo de determinado nivel de uso. Para obtener más información acerca de AWS los costos y el nivel gratuito, consulte los precios.

Paso 1: Crear la máquina de estado

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

  2. Escribe Orchestrate Lambda functions en el cuadro de búsqueda y, a continuación, selecciona Orchestrate Lambda funciona a partir de los resultados de búsqueda que se devuelven.

  3. Elija Siguiente para continuar.

  4. Elija Ejecutar una demostración para crear un ready-to-deploy flujo de trabajo y de solo lectura, o elija Crear a partir de ella para crear una definición de máquina de estados editable sobre la que pueda crear e implementar posteriormente.

    En este proyecto de muestra se implementan los siguientes recursos:

    • Cinco Lambda funciones

    • Un registro Amazon Simple Queue Service cola

    • Un registro Amazon Simple Notification Service tema

    • Un registro AWS Step Functions máquina de estado

    • Relacionado AWS Identity and Access Management (IAM) roles

    La siguiente imagen muestra el gráfico del flujo de trabajo de Orchestrate Lambda proyecto de ejemplo de funciones:

    Gráfico de flujo de trabajo de Orchestrate Lambda proyecto de ejemplo de funciones.
  5. Elija Utilizar plantilla para continuar con la selección.

Los siguientes pasos dependen de la elección anterior:

  1. Realice una demostración: puede revisar la máquina de estados antes de crear un proyecto de solo lectura con los recursos desplegados por AWS CloudFormation a tu Cuenta de AWS.

    Puede ver la definición de la máquina de estados y, cuando esté listo, elija Implementar y ejecutar para implementar el proyecto y crear los recursos.

    La creación de recursos y permisos puede tardar hasta 10 minutos en implementarse. Puede utilizar el enlace Stack ID para supervisar el progreso en AWS CloudFormation.

    Una vez completada la implementación, deberías ver tu nueva máquina de estados en la consola.

  2. Aproveche esta información: puede revisar y editar la definición del flujo de trabajo. Es posible que tengas que establecer valores para los marcadores de posición en el proyecto de ejemplo antes de intentar ejecutar tu flujo de trabajo personalizado.

nota

Es posible que se apliquen cargos estándar por los servicios implementados en tu cuenta.

Paso 2: Ejecutar la máquina de estado

Una vez aprovisionados e implementados todos los recursos, aparece el cuadro de diálogo Iniciar ejecución.

  1. En la página Máquina de estado, elija su proyecto de muestra.

  2. En la página del proyecto de muestra, seleccione Iniciar ejecución.

  3. En el cuadro de diálogo Iniciar ejecución, haga lo siguiente:

    1. (Opcional) Introduce 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.

    2. (Opcional) En el cuadro de entrada, introduce los valores de entrada comoJSON. Puede omitir este paso si está realizando una demostración.

    3. Seleccione Iniciar ejecución.

    La consola Step Functions lo dirigirá a una página de detalles de ejecución en la que puede elegir estados en la vista de gráficos para explorar la información relacionada en el Detalles del paso panel.

Acerca de la máquina de estado y su ejecución

La máquina de estados de este proyecto de ejemplo se integra con AWS Lambda pasando los parámetros directamente a esos recursos, utiliza una SQS cola de Amazon para gestionar la solicitud de aprobación humana y utiliza un SNS tema de Amazon para devolver los resultados de la consulta.

Una ejecución de Step Functions recibe un JSON texto como entrada y pasa esa entrada al primer estado del flujo de trabajo. Los estados individuales reciben JSON datos como entrada y, por lo general, JSON los pasan como salida al siguiente estado. En este proyecto de muestra, la salida de cada paso se transfiere como entrada al siguiente paso del flujo de trabajo. Por ejemplo, el paso Generar recomendación de compra/venta recibe como la salida del paso Consultar el precio de una acción como entrada. Además, la salida del paso Generar recomendación de compra/venta se transfiere como entrada al siguiente paso, Solicitar aprobación humana, que imita un paso de aprobación humana.

nota

Para ver el resultado devuelto por un paso y la entrada transferida a un paso, abra la página Detalles de la ejecución de su flujo de trabajo. En la sección Detalles del paso, visualice la entrada y la salida de cada paso que seleccione en el Modo de visualización.

Para implementar un paso de aprobación humana, normalmente se pausa la ejecución del flujo de trabajo hasta que se devuelva un token de tarea. En este proyecto de ejemplo, se pasa un mensaje a una SQS cola de Amazon, que se utiliza como activador de la función Lambda definida para gestionar la funcionalidad de devolución de llamadas. El mensaje contiene un token de tarea y la salida devuelta en el paso anterior. La función de Lambda se invoca con la carga del mensaje. La ejecución del flujo de trabajo se detiene hasta que recibe el token de la tarea con una llamada. SendTaskSuccessAPI Para obtener más información acerca de los tokens de tarea, consulte Espera a que te devuelvan la llamada con el token de tarea.

El siguiente código de la StepFunctionsSample-HelloLambda-ApproveSqsLambda función muestra cómo se define para aprobar automáticamente cualquier tarea enviada por la SQS cola de Amazon a través de la máquina de estados Step Functions.

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

Examine este ejemplo de máquina de estados para ver cómo Step Functions controla Lambda y Amazon. SQS

Para obtener más información sobre cómo AWS Step Functions puede controlar otros AWS servicios, consulteIntegración de servicios con Step Functions.

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

Para obtener información sobre cómo configurar el uso IAM de Step Functions con otros AWS servicios, consulteCómo Step Functions genera IAM políticas para servicios integrados.

IAMEjemplos

Estos ejemplos AWS Identity and Access Management (IAM) las políticas generadas por el proyecto de ejemplo incluyen los privilegios mínimos necesarios para ejecutar la máquina de estados y los recursos relacionados. Le recomendamos que incluya solo los permisos que sean necesarios en sus IAM políticas.

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

Para obtener información sobre cómo configurar el uso IAM de Step Functions con otros AWS servicios, consulteCómo Step Functions genera IAM políticas para servicios integrados.