Procesamiento dinámico de datos con un estado Map - 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.

Procesamiento dinámico de datos con un estado Map

Este proyecto de muestra demuestra el paralelismo dinámico mediante un estado Map.

En este proyecto, Step Functions utiliza una AWS Lambda función para extraer mensajes de una cola de Amazon SQS y pasar una matriz JSON de esos mensajes a un estado. Map Para cada mensaje de la cola, la máquina de estado escribe el mensaje en DynamoDB, invoca la otra función de Lambda para eliminar el mensaje de Amazon SQS y, a continuación, publica el mensaje en el tema de Amazon SNS.

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

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 Dynamically process data with a Map state en el cuadro de búsqueda y, a continuación, seleccione Procesamiento dinámico de datos con un estado Map 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:

    • Una cola de Amazon SQS en la que el estado Map lee y elimina los mensajes de forma iterativa.

    • Una tabla de DynamoDB en la que el estado Map escribe mensajes de forma iterativa.

    • Un tema de Amazon SNS en el que Step Functions publica los mensajes que lee de la cola de Amazon SQS.

    • Dos AWS Lambda funciones

    • Una máquina AWS Step Functions de estados

    • Funciones relacionadas AWS Identity and Access Management (IAM)

    En la siguiente imagen se ilustra el gráfico del flujo de trabajo del proyecto de muestra Procesamiento dinámico de datos con un estado Map:

    
            Gráfico del flujo de trabajo del proyecto de muestra Procesamiento dinámico de datos con un estado Map.
  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

      Se pueden aplicar cargos estándar por cada servicio utilizado en la CloudFormation plantilla.

Después de implementar los recursos del proyecto de muestra, tendrá que añadir elementos a la cola de Amazon SQS y suscribirse al tema de Amazon SNS para poder iniciar una ejecución de la máquina de estado.

Paso 2: Suscribirse al tema de Amazon SNS

  1. Abra la consola de Amazon SNS.

  2. Seleccione Temas y elija el tema creado por el proyecto de muestra del estado Map.

    El nombre será similar a MapSampleProj-SNSTopic-1cQo4HQ3IR1kN.

  3. Seleccione Crear suscripción.

    Se muestra la página Crear suscripción, que muestra el valor de ARN del tema del tema.

  4. En Protocolo, elija Correo electrónico.

  5. En Punto de conexión, escriba una dirección de correo electrónico para suscribirse al tema.

  6. Seleccione Crear suscripción.

    nota

    Debe confirmar la suscripción en su correo electrónico para que esta se active.

  7. Abra el correo electrónico Confirmación de suscripción en la cuenta relacionada y abra la URL Confirmar suscripción.

    Se muestra la página Suscripción confirmada.

Paso 3: Añadir mensajes a la cola de Amazon SQS

  1. Abra la consola de Amazon SQS.

  2. Seleccione la cola creada por el proyecto de muestra del estado Map.

    El nombre será similar a MapSampleProj-SqSqueue-1uDiC9vZdOrn7.

  3. Seleccione Enviar y recibir mensajes.

  4. En la página Enviar un mensaje, introduzca un mensaje y seleccione Enviar mensaje.

  5. Introduzca otro mensaje y seleccione Enviar mensaje. Siga escribiendo más mensajes hasta que tenga varios en la cola de Amazon SQS.

Paso 4: Ejecutar la máquina de estado

nota

Las colas de Amazon SNS son de consistencia final. Para obtener los mejores resultados, espere unos minutos entre llenar la cola y llevar a cabo una ejecución de 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) 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.

Código de la máquina de estado de ejemplo

La máquina de estado de este proyecto de muestra se integra con Amazon SQS, Amazon SNS y Lambda pasando parámetros directamente a esos recursos.

Examine este ejemplo de máquina de estado para ver cómo Step Functions controla Lambda, DynamoDB y Amazon SNS conectándose al nombre de recurso de Amazon (ARN) del campo Resource y pasando Parameters a la API del servicio.

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

{ "Comment": "An example of the Amazon States Language for reading messages from an SQS queue and iteratively processing each message.", "StartAt": "Read messages from SQS Queue", "States": { "Read messages from SQS Queue": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "MapSampleProj-ReadFromSQSQueueLambda-1MY3M63RMJVA9" }, "Next": "Are there messages to process?" }, "Are there messages to process?": { "Type": "Choice", "Choices": [ { "Variable": "$", "StringEquals": "No messages", "Next": "Finish" } ], "Default": "Process messages" }, "Process messages": { "Type": "Map", "Next": "Finish", "ItemsPath": "$", "Parameters": { "MessageNumber.$": "$$.Map.Item.Index", "MessageDetails.$": "$$.Map.Item.Value" }, "Iterator": { "StartAt": "Write message to DynamoDB", "States": { "Write message to DynamoDB": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:putItem", "ResultPath": null, "Parameters": { "TableName": "MapSampleProj-DDBTable-YJDJ1MKIN6C5", "ReturnConsumedCapacity": "TOTAL", "Item": { "MessageId": { "S.$": "$.MessageDetails.MessageId" }, "Body": { "S.$": "$.MessageDetails.Body" } } }, "Next": "Remove message from SQS queue" }, "Remove message from SQS queue": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.MessageDetails", "ResultPath": null, "Parameters": { "FunctionName": "MapSampleProj-DeleteFromSQSQueueLambda-198J2839ZO5K2", "Payload": { "ReceiptHandle.$": "$.ReceiptHandle" } }, "Next": "Publish message to SNS topic" }, "Publish message to SNS topic": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "InputPath": "$.MessageDetails", "Parameters": { "Subject": "Message from Step Functions!", "Message.$": "$.Body", "TopicArn": "arn:aws:sns:us-east-1:012345678910:MapSampleProj-SNSTopic-1CQO4HQ3IR1KN" }, "End": true } } } }, "Finish": { "Type": "Succeed" } } }

Ejemplo de IAM

Esta política de ejemplo AWS Identity and Access Management (IAM) generada por el proyecto de muestra incluye 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.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:012345678901:function:MapSampleProj-ReadFromSQSQueueLambda-1MY3M63RMJVA9", "arn:aws:lambda:us-east-1:012345678901:function:MapSampleProj-DeleteFromSQSQueueLambda-198J2839ZO5K2" ], "Effect": "Allow" }, { "Action": [ "dynamodb:PutItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:012345678901:table/MapSampleProj-DDBTable-YJDJ1MKIN6C5" ], "Effect": "Allow" }, { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:us-east-1:012345678901:MapSampleProj-SNSTopic-1CQO4HQ3IR1KN" ], "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.