Ejemplo de creación de un patrón de devolución de llamada con Amazon SQSSNS, Amazon y 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.

Ejemplo de creación de un patrón de devolución de llamada con Amazon SQSSNS, Amazon y Lambda

Este proyecto de ejemplo demuestra cómo tener AWS Step Functions haga una pausa durante una tarea y espere a que un proceso externo devuelva un token de tarea que se generó cuando se inició la tarea.

Cuando este proyecto de muestra se implementa y comienza una ejecución, se producen los siguientes pasos.

  1. Step Functions pasa un mensaje que incluye un token de tarea a una cola de Amazon Simple Queue Service (AmazonSQS).

  2. A continuación, Step Functions se detiene, esperando que ese token se devuelva.

  3. La SQS cola de Amazon activa un AWS Lambda función que llama SendTaskSuccesscon el mismo token de tarea.

  4. Cuando se recibe el token de tarea, el flujo de trabajo continúa.

  5. La "Notify Success" tarea publica un mensaje de Amazon Simple Notification Service (AmazonSNS) en el que se indica que se ha recibido la devolución de llamada.

Para obtener información acerca de cómo implementar el patrón de devolución de llamada en Step Functions, consulte Espera a que te devuelvan la llamada con el token de tarea.

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

Paso 1: Crear la máquina de estado

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

  2. Escriba Callback pattern example en el cuadro de búsqueda y, a continuación, seleccione Ejemplo de patrón de devolución de llamadas en los resultados de búsqueda que aparecen.

  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 Construir 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:

    • Una cola de SQS mensajes de Amazon.

    • Función Lambda que llama a la acción Step FunctionsAPI. SendTaskSuccess

    • Un SNS tema de Amazon para notificar el éxito o el fracaso de una tarea e indicar si el flujo de trabajo puede continuar o no.

    • Un registro AWS Step Functions máquina de estado

    • Relacionado AWS Identity and Access Management (IAM) roles

    En la siguiente imagen se ilustra el gráfico del flujo de trabajo del proyecto de muestra Ejemplo de patrón de devolución de llamadas:

    Gráfico ilustrativo del flujo de trabajo Gestionar un trabajo por lotes.
  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

  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.

    Por ejemplo, para ver cómo Step Functions ha progresado en el flujo de trabajo y ha recibido una llamada de AmazonSQS, consulta las entradas de la tabla Eventos. En la siguiente imagen se muestra el resultado de la ejecución del paso Notificar éxito. También muestra los cinco primeros eventos del historial de eventos de ejecución. Amplíe cada evento para ver más detalles sobre ese evento.

    Extracto del resultado de la ejecución del paso «Notificar el éxito», en el que se muestran cinco eventos.

Ejemplo de devolución de llamada de Lambda

Para ver cómo funcionan juntos los componentes de este proyecto de ejemplo, consulte los recursos que se implementaron en su AWS account. Por ejemplo, esta es la función de Lambda que llama a Step Functions con el token de tarea.

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };