Procesar datos dinámicamente con un estado de mapa - 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.

Procesar datos dinámicamente con un estado de mapa

Este proyecto de muestra demuestra el paralelismo dinámico mediante un estado Map. Este proyecto de muestra crea lo siguiente:

  • Dos funciones de AWS Lambda

  • Una cola de Amazon Simple Queue Service (Amazon SQS)

  • Un tema de Amazon Simple Notification Service (Amazon SNS)

  • Una tabla de Amazon DynamoDB

  • Una máquina de estado de AWS Step Functions

En este proyecto, Step Functions utiliza unAWS Lambdapara extraer mensajes de una cola de Amazon SQS y pasar una matriz JSON de esos mensajes a unMapestado. 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 sobre lasMapintegraciones de los servicios de estados y Step Functions; consulte los temas siguientes:

Cree la máquina de estado y aprovisione recursos

  1. Abra el iconoConsola de Step Functionsy eligeCreación de una máquina de estado.

  2. ElegirProyectos de muestray luego seleccioneProcesar datos dinámicamente con un estado de mapa.

    Aparecen el Code (Código) y el Visual Workflow (Flujo de trabajo visual) de la máquina de estado.

    
            Flujo de trabajo del estado Map.
  3. Elija Next (Siguiente).

    Se muestra la página Deploy resources (Implementar recursos), que muestra los recursos que se crearán. Para este proyecto de muestra, los recursos incluyen:

    • Una cola de Amazon SQS

    • Un tema de Amazon SNS

    • Una tabla de DynamoDB

    • Dos funciones de Lambda

    • Máquina de estado de Step Functions

  4. Elija Deploy Resources (Implementar recursos).

    nota

    El proceso de creación de estos recursos y los permisos de IAM relacionados puede tardar hasta 10 minutos. Mientras se muestra la página Deploy resources (Implementar recursos), puede abrir el enlace Stack ID (ID de pila) para ver qué recursos se están aprovisionando.

Una vez que se hayan implementado 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.

Suscripción al tema de Amazon SNS

  1. Abra la consola de Amazon SNS.

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

    El nombre será parecido aMapSampleProj-SN STopic-1 CQO4HQ3IR1 KN.

  3. En Subscriptions (Suscripciones), elija Create subscription (Crear suscripción).

    Se muestra la página Create subscription (Crear suscripción), que muestra el valor de Topic ARN (ARN del tema) del tema.

  4. En Protocol (Protocolo), elija Email (Correo electrónico).

  5. En Endpoint (Punto de enlace), escriba una dirección de correo electrónico para suscribirse al tema.

  6. Elija Create subscription (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 Subscription Confirmation (Confirmación de suscripción) en la cuenta relacionada y abra la URL Confirm subscription (Confirmar suscripción).

    Se muestra la página Subscription confirmed! (Suscripción confirmada).

Agregar 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á parecido aMapSampleProj-SQSQueue-1 UDIC9 VZDORN 7.

  3. En la lista Queue Actions (Acciones de cola), seleccione Send a Message (Enviar un mensaje).

  4. En la ventana Send a Message (Enviar un mensaje), introduzca un mensaje y seleccione Send Message (Enviar mensaje).

  5. Seleccione Send Another Message (Enviar otro mensaje).

    Siga escribiendo mensajes hasta que tenga varios en la cola de Amazon SQS.

  6. Elija Close (Cerrar).

Inicio de una nueva ejecución

nota

Las colas de Amazon SNS presentan 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. Abra el iconoConsola de Step Functions.

  2. En la páginaMáquinas de estado, seleccione laMapStateStateMachinemáquina de estado creada por el proyecto de muestra y seleccioneComience la ejecución.

  3. En la página New execution (Nueva ejecución), escriba un nombre para la ejecución (opcional) y, a continuación, elija Start Execution (Iniciar ejecución).

  4. (Opcional) Para identificar la ejecución, puede especificar un nombre para ella en laNombre. De forma predeterminada, Step Functions genera automáticamente un nombre de ejecución exclusivo.

    nota

    Step Functions le permite crear nombres de máquina de estado, ejecución y actividad que contengan caracteres no ASCII. Estos nombres que no son ASCII no funcionan con AmazonCloudWatch. Para asegurarte de que puedes realizar un seguimientoCloudWatchmétricas, elija un nombre que utilice solo caracteres ASCII.

  5. (Opcional) Vaya a la máquina de estado recién creada en Step FunctionsSalpicaderoy luego seleccioneNueva ejecución.

  6. Cuando finalice la ejecución, podrá seleccionar estados en el Visual workflow (Flujo de trabajo visual) y examinar la Input (Entrada) y la Output (Salida) en Step details (Detalles del paso).

Ejemplo de código de máquina de estado

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 controla Step Functions Lambda, DynamoDB y Amazon SNS mediante una conexión al Amazon Resource Name (ARN) delResourcecampo, y pasandoParametersa la API de servicio.

Para obtener más información acerca de cómo AWS Step Functions puede controlar otros servicios de AWS, consulte Utilización de 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

Este ejemploAWS Identity and Access ManagementLa política de (IAM) generada por el proyecto de muestra incluye los privilegios mínimos necesarios para ejecutar la máquina de estado 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 acerca de cómo configurar IAM cuando se utiliza Step Functions con otrosAWSservicios, consultePolíticas de IAM para servicios integrados.