Procese datos de forma dinámica 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.

Procese datos de forma dinámica con un estado de mapa

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

En este proyecto, Step Functions utiliza unAWS Lambdafunción para 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 estados 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 Amazon SNS.

Para obtener más información sobreMapestados e integraciones del servicio de Step Functions, consulte lo siguiente:

Paso 1: crear la máquina de estados y aprovisionar los recursos

  1. Abre elConsola Step Functionsy eligeCrear una máquina de estados.

  2. TipoDynamically process data with a Map stateen el cuadro de búsqueda y, a continuación, eligeProcesa datos de forma dinámica con un estado de mapaa partir de los resultados de búsqueda que se devuelven.

  3. Elija Next (Siguiente) para continuar.

  4. Step Functions enumera lasServicios de AWSutilizado en el proyecto de muestra que ha seleccionado. También muestra un gráfico de flujo de trabajo para el proyecto de muestra. Implemente este proyecto en suCuenta de AWSo úselo como punto de partida para la creación de sus propios proyectos. En función de cómo desee proceder, elijaEjecute una demostraciónoConstruye sobre la base.

    En este proyecto de ejemplo se utilizan los siguientes recursos:

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

    • Una tabla de DynamoDB en la que el estado del mapa escribe los 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 funciones de AWS Lambda

    • Una máquina de estado de AWS Step Functions

    • RelacionadoAWS Identity and Access ManagementFunciones (IAM)

    La siguiente imagen muestra el gráfico del flujo de trabajo paraProcese datos de forma dinámica con un estado de mapaproyecto de muestra:

    
            Gráfico de flujo de trabajo delProcese datos de forma dinámica con un estado de mapaproyecto de muestra.
  5. EligeUtilizar la plantillapara continuar con la selección.

  6. Haga una de las siguientes acciones:

    • Si seleccionasteConstruye sobre la base, Step Functions crea el prototipo de flujo de trabajo para el proyecto de muestra que ha seleccionado. Step Functions no implementa los recursos enumerados en la definición del flujo de trabajo.

      En Workflow StudioModo de diseño, arrastre y suelte los estados desdeNavegador de estadospara seguir creando su prototipo de flujo de trabajo. O cámbiese alModo de códigoque proporciona un editor de código integrado similar a VS Code para actualizarLenguaje de estados de AmazonDefinición (ASL) de su máquina de estados en la consola Step Functions. Para obtener más información sobre el uso de Workflow Studio para crear las máquinas de estado, consulteUso de Workflow Studio.

      importante

      Recuerde actualizar el nombre de recurso de Amazon (ARN) para los recursos de Amazon (ARN) para los recursos de Amazon (ARN) para los recursos de Amazon (ARN) para los recursos de Amazon (ARN) para los recursos de Amazon (ARN)ejecuta tu flujo de trabajo.

    • Si seleccionasteRealiza una demostración, Step Functions crea un proyecto de muestra de solo lectura que utiliza unAWS CloudFormationplantilla para implementar elAWSlos recursos enumerados en esa plantilla para suCuenta de AWS.

      sugerencia

      Para ver la definición de máquina de estados del proyecto de muestra, elijaCódigo.

      Cuando esté listo, elijaImplemente y ejecutepara implementar el proyecto de muestra y crear los recursos.

      La creación de estos recursos y los permisos de IAM relacionados. Mientras se despliegan sus recursos, puede abrir el CloudFormation Utilice el enlace Stack ID para ver qué recursos se están aprovisionando.

      Una vez creados todos los recursos del proyecto de ejemplo, podrás ver el nuevo proyecto de ejemplo en laMáquinas del estadopágina.

      importante

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

Una vez desplegados los recursos del proyecto de muestra, debe añadir elementos a la cola de Amazon SQS y suscribirse al tema Amazon SNS antes de ejecutar la máquina de estados.

Paso 2: Suscríbase al tema 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á similar aMapSampleProj-SNSTOPIC-1CQo4HQ3IR1kN.

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

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 aMapSampleProj-SQSqueue-1UDIC9VZDORN7.

  3. Seleccione Send and receive messages (Enviar y recibir mensajes).

  4. En elEnviar y recibir mensajespágina, introduce un mensaje y eligeEnviar mensaje.

  5. Introducir otro mensaje y elegirEnviar mensaje. Siga introduciendo más mensajes hasta que haya varios en la cola de Amazon SQS.

Paso 4: ejecutar la máquina de estados

nota

Las colas en Amazon SNS al final son coherentes. 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 elMáquinas del estadopágina, elige tu proyecto de muestra.

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

  3. En elIniciar la ejecucióncuadro de diálogo, haga lo siguiente:

    1. (Opcional) Para identificar la ejecución, puede especificarle un nombre en elNombrecaja. De forma predeterminada, Step Functions genera automáticamente un nombre de ejecución único.

      nota

      Step Functions le permite crear nombres de máquinas de estados, de ejecución y de actividad que contengan caracteres que no sean ASCII. Estos nombres que no son ASCII no funcionan con Amazon CloudWatch. Para asegurarse de que puede rastrear CloudWatch En cuanto a las métricas, elija un nombre que utilice únicamente caracteres ASCII.

    2. (Opcional) En elEntradacuadro, introduzca los valores de entrada en formato JSON para ejecutar su flujo de trabajo.

      Si opta porRealiza 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 estados.

    3. Seleccione Start execution (Iniciar ejecución).

    4. La consola Step Functions lo dirige a una página que lleva el título con su ID de ejecución. Esta página es conocida comoDetalles de la ejecuciónpágina. 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, selecciona los estados individuales en laVista de gráficoy, a continuación, elija las pestañas individuales delDetalles del pasopanel para ver los detalles de cada estado, incluidas la entrada, la salida y la definición, respectivamente. Para obtener detalles sobre la información de ejecución, puede consultarla en elDetalles de la ejecuciónpágina, consultePágina de detalles de ejecución: descripción general de la interfaz.

Ejemplo de código de máquina de estado

La máquina de estados de este proyecto de ejemplo se integra con Amazon SQS, Amazon SNS y Lambda al pasar los parámetros directamente a esos recursos.

Explore este ejemplo de máquina de estados para ver cómo Step Functions controla Lambda, DynamoDB y Amazon SNS mediante la conexión al nombre de recurso de Amazon (ARN) en elResourcecampo, y pasandoParametersa la API del 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 (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 solo los permisos que sean necesarios en sus 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 la IAM al utilizar Step Functions con otrasAWSservicios, consultePolíticas de IAM para servicios integrados.