Ejemplos de orquestación de 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.

Ejemplos de orquestación de Lambda

Este proyecto de ejemplo muestra cómo integrar AWS Lambda funciones en máquinas de estados de 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 mediante un tema de SNS.

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 AWS los nuevos 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 sobre AWS los costos y el nivel gratuito, consulta los precios.

Paso 1: Crear la máquina de estado y aprovisionar recursos

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

  2. Escriba Orchestrate Lambda functions en el cuadro de búsqueda y, a continuación, seleccione Organizar funciones de Lambda en los resultados de búsqueda que aparecen.

  3. Elija Siguiente para continuar.

  4. Step Functions muestra una lista de las Servicios de AWS utilizadas en el proyecto de muestra que ha seleccionado. También muestra un gráfico del flujo de trabajo para el proyecto de muestra. Implemente este proyecto en su empresa Cuenta de AWS o utilícelo como punto de partida para crear sus propios proyectos. En función de cómo desee continuar, elija Ejecutar una demostración o Crear a partir de ella.

    En este proyecto de muestra se implementan los siguientes recursos:

    • Cinco funciones de Lambda

    • Una cola de Amazon Simple Queue Service

    • Un tema de Amazon Simple Notification Service

    • Una máquina de estado de AWS Step Functions

    • Roles de AWS Identity and Access Management (IAM) relacionados

    En la siguiente imagen se ilustra el gráfico del flujo de trabajo del proyecto de muestra Orquestar funciones de Lambda:

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

  6. Realice una de las acciones siguientes:

    • Si se ha seleccionado Crear a partir de ella, Step Functions crea el prototipo de flujo de trabajo para el proyecto de muestra que ha seleccionado. Step Functions no implementa los recursos que se enumeran en la definición del flujo de trabajo.

      En Modo Diseño de Workflow Studio, arrastre y suelte los estados desde el Navegador de estados para seguir creando su prototipo de flujo de trabajo. Del mismo modo, cambie al Modo Código que proporciona un editor de código integrado similar a VS Code para actualizar la definición (ASL) de Lenguaje de estados de Amazon de su máquina de estado en la consola de Step Functions. Para obtener más información acerca del uso de Workflow Studio para crear máquinas de estados, consulte Usar Workflow Studio.

      importante

      No olvide actualizar el marcador de posición del nombre de recurso de Amazon (ARN) para los recursos que se utilizan en el proyecto de muestra antes de ejecutar el flujo de trabajo.

    • Si seleccionó Ejecutar una demostración, Step Functions crea un proyecto de ejemplo de solo lectura que utiliza una AWS CloudFormation plantilla para implementar los AWS recursos que figuran en esa plantilla en su empresa. Cuenta de AWS

      sugerencia

      Seleccione Código para ver la definición de máquina de estados del proyecto de muestra.

      Cuando esté listo, elija Implementar y ejecutar para implementar el proyecto de muestra y crear los recursos.

      El proceso de creación de estos recursos y los permisos de IAM relacionados puede tardar hasta 10 minutos. Mientras se despliegan sus recursos, puede abrir el enlace CloudFormation Stack ID para ver qué recursos se están aprovisionando.

      Una vez que se creen todos los recursos del proyecto de muestra, podrá ver el nuevo proyecto de muestra en la página Máquinas de estado.

      importante

      Es posible que se apliquen cargos estándar por cada servicio utilizado en la CloudFormation plantilla.

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

    2. (Opcional) En el cuadro Entrada, introduzca los valores de entrada en formato JSON para ejecutar el flujo de trabajo.

      Si se ha seleccionado Ejecutar una demostración, no es necesario proporcionar ninguna entrada de ejecución.

      nota

      Si el proyecto de demostración que implementó contiene datos de entrada de ejecución rellenados previamente, utilice esa entrada para ejecutar la máquina de estado.

    3. Seleccione Iniciar ejecución.

    4. La consola de Step Functions le dirige a una página cuyo título es su ID de ejecución. Esta página se conoce como Detalles de la ejecución. En esta página, puede revisar los resultados de la ejecución a medida que avanza la ejecución o una vez finalizada.

      Para revisar los resultados de la ejecución, elija los estados individuales en la Vista de gráfico y, a continuación, elija las pestañas individuales del panel Detalles del paso para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener más información sobre la ejecución que puede ver en la página Detalles de la ejecución, consulte Página de detalles de ejecución: información general de la interfaz.

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

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

Una ejecución de Step Functions recibe un texto JSON como entrada y transfiere dicha entrada al primer estado en el flujo de trabajo. Los estados individuales reciben datos de JSON como entrada y normalmente pasan datos de JSON 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 muestra, se transfiere un mensaje a una cola de Amazon SQS, que se utiliza como activador de la función de 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 tarea con una llamada a la API SendTaskSuccess. Para obtener más información acerca de los tokens de tarea, consulte Cómo esperar una devolución de llamada con el token de tarea.

El siguiente código de la función StepFunctionsSample-HelloLambda-ApproveSqsLambda muestra cómo se define para aprobar automáticamente cualquier tarea enviada por la cola de Amazon SQS a través de la máquina de estado de 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 estado 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, consulte. Uso AWS Step Functions con otros servicios

{ "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 IAM al utilizar Step Functions con otros AWS servicios, consultePolíticas de IAM para servicios integrados.

Ejemplos de IAM

Estas políticas de ejemplo AWS Identity and Access Management (IAM) 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 únicamente los permisos necesarios en las políticas de IAM.

{ "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 IAM al utilizar Step Functions con otros AWS servicios, consultePolíticas de IAM para servicios integrados.