Processar dados dinamicamente com um estado Mapa - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Processar dados dinamicamente com um estado Mapa

Este projeto de exemplo demonstra o paralelismo dinâmico usando um estado Mapa.

Neste projeto, Step Functions usa uma AWS Lambda função para extrair mensagens de uma fila do Amazon SQS e passar uma matriz JSON dessas mensagens para um estado. Map Para cada mensagem na fila, a máquina de estado grava a mensagem no DynamoDB, invoca a outra função do Lambda para remover a mensagem do Amazon SQS e publica a mensagem no tópico do Amazon SNS.

Para obter mais informações sobre estados Map e integrações de serviços do Step Functions, consulte os tópicos a seguir.

Etapa 1: Criar a máquina de estado e provisionar os recursos

  1. Abra o console do Step Functions e clique em Criar máquina de estado.

  2. Digite Dynamically process data with a Map state no campo de pesquisa e escolha Processar dados dinamicamente com um estado Mapa a partir dos resultados de pesquisa que são retornados.

  3. Escolha Próximo para continuar.

  4. Step Functions lista o Serviços da AWS usado no projeto de amostra que você selecionou. Também mostra um gráfico de fluxo de trabalho para o projeto de amostra. Implante esse projeto no seu Conta da AWS ou use-o como ponto de partida para criar seus próprios projetos. Com base em como você deseja prosseguir, escolha Executar uma demonstração ou Criar com base nela.

    Este projeto de exemplo implementa os recursos a seguir.

    • Uma fila do Amazon SQS onde o estado Mapa lê e remove mensagens de forma iterativa.

    • Uma tabela do DynamoDB onde o estado Mapa grava mensagens de forma iterativa.

    • Um tópico do Amazon SNS onde o Step Functions publica as mensagens que lê da fila do Amazon SQS.

    • Duas AWS Lambda funções

    • Uma máquina de AWS Step Functions estado

    • Funções relacionadas AWS Identity and Access Management (IAM)

    A imagem a seguir mostra o gráfico do fluxo de trabalho para o exemplo de projeto Processar dados dinamicamente com um estado Mapa:

    Gráfico do fluxo de trabalho para o exemplo de projeto Processar dados dinamicamente com um estado Mapa.
  5. Escolha Usar modelo para continuar com a seleção.

  6. Execute um destes procedimentos:

    • Se você selecionou Criar com base nela, o Step Functions criará o protótipo do fluxo de trabalho para o projeto de amostra selecionado. O Step Functions não implanta os recursos listados na definição do fluxo de trabalho.

      No Modo de design do Workflow Studio, arraste e solte os estados do Navegador de estados para continuar criando seu protótipo de fluxo de trabalho. Ou mude para o Modo de código que fornece um editor de código integrado semelhante ao VS Code para atualizar a definição Amazon States Language (ASL) de sua máquina de estado no console Step Functions. Para obter mais informações sobre o uso do Workflow Studio para criar suas máquinas de estado, consulte Como usar o Workflow Studio.

      Importante

      Lembre-se de atualizar o espaço reservado do nome do recurso da Amazon (ARN) para os recursos usados no projeto de amostra antes de executar o fluxo de trabalho.

    • Se você selecionou Executar uma demonstração, o Step Functions cria um projeto de amostra somente para leitura que usa um AWS CloudFormation modelo para implantar os AWS recursos listados nesse modelo no seu. Conta da AWS

      dica

      Para visualizar a definição da máquina de estado do projeto de amostra, escolha Código.

      Quando estiver pronto, escolha Implemente e execute para implantar o projeto de amostra e criar os recursos.

      Pode levar até 10 minutos para que esses recursos e as permissões relacionadas ao IAM sejam criados. Enquanto seus recursos estão sendo implantados, você pode abrir o link do CloudFormation Stack ID para ver quais recursos estão sendo provisionados.

      Depois que todos os recursos do projeto de exemplo forem criados, você poderá ver o novo projeto de exemplo listado na página Máquinas de estado.

      Importante

      Taxas padrão podem ser aplicadas a cada serviço usado no CloudFormation modelo.

Depois que os recursos do projeto de exemplo forem implantados, será necessário adicionar itens à fila do Amazon SQS e inscrever-se no tópico do Amazon SNS antes de iniciar uma execução da máquina de estado.

Etapa 2: Assinar o tópico do Amazon SNS

  1. Abra o console do Amazon SNS.

  2. Escolha Topics (Tópicos) e escolha o tópico que foi criado pelo projeto de exemplo de estado Map.

    O nome será semelhante a MapSampleProj-SNSTopic-1CQO4HQ3iR1KN.

  3. Selecione Criar assinatura.

    A página Create subscription (Criar assinatura) é exibida, listando o Topic ARN (ARN do tópico) para o tópico.

  4. Em Protocol (Protocolo), escolha Email (E-mail).

  5. Em Endpoint, insira um endereço de e-mail para assinar o tópico.

  6. Selecione Criar assinatura.

    nota

    Você deve confirmar a assinatura no seu e-mail antes da ativação.

  7. Abra o e-mail de Subscription Confirmation (Confirmação de assinatura) na conta relacionada e abra a URL Confirm subscription (Confirmar assinatura).

    A página Subscription confirmed! (Assinatura confirmada!) é exibida.

Etapa 3: Adicionar mensagens à fila do Amazon SQS

  1. Abra o console do Amazon SQS.

  2. Escolha a fila criada pelo projeto de exemplo de estado Map.

    O nome será semelhante a MapSampleProj-sqsQueue-1udic9vzdOrn7.

  3. Escolha Send and receive messages (Enviar e receber mensagens).

  4. Na janela Enviar e receber mensagens, insira uma mensagem e escolha Enviar mensagem.

  5. Digitando outra mensagem e escolha Enviar mensagem. Continue inserindo mais mensagens até ter várias na fila do Amazon SQS.

Etapa 4: Executar a máquina de estado

nota

As filas no Amazon SNS são eventualmente consistentes. Para obter melhores resultados, aguarde alguns minutos entre o preenchimento da sua fila e a execução da sua máquina de estado.

  1. Na página Máquinas de estado, escolha seu projeto de exemplo.

  2. Na página do projeto de exemplo, escolha Iniciar execução.

  3. Na caixa de diálogo Iniciar execução, faça o seguinte:

    1. (Opcional) Para identificar a execução, insira um nome para ela no campo Nome. Por padrão, o Step Functions cria automaticamente um nome de execução exclusivo.

      nota

      Step Functions permite criar nomes para máquinas de estado, execuções e atividades, além de rótulos que contenham caracteres não ASCII. Esses nomes não ASCII não funcionam com a Amazon. CloudWatch Para garantir que você possa acompanhar CloudWatch as métricas, escolha um nome que use somente caracteres ASCII.

    2. (Opcional) No campo Entrada, insira os valores de entrada no formato JSON para executar o fluxo de trabalho.

      Se você optar por Executar uma demonstração, não precisará fornecer nenhuma entrada de execução.

      nota

      Se o projeto de demonstração que você implementou contiver dados de entrada de execução pré-preenchidos, use essa entrada para executar a máquina de estado.

    3. Selecione Iniciar execução.

    4. O console do Step Functions direciona você para uma página em que o título é o ID da execução. Essa página é conhecida como página de Detalhes da execução. Nesta página, você pode revisar os resultados da execução à medida que a execução avança ou após a conclusão.

      Para revisar os resultados da execução, escolha estados individuais na Exibição em gráfico e, em seguida, escolha as guias individuais no painel Detalhes da etapa para visualizar os detalhes de cada estado, incluindo entrada, saída e definição, respectivamente. Para obter detalhes sobre as informações de execução que você pode visualizar na página Detalhes da execução, consulte Página de Detalhes da execução — Visão geral da interface.

Exemplo de código da máquina de estado

A máquina de estado deste exemplo de projeto se integra ao Amazon SQS, ao Amazon SNS e ao Lambda passando parâmetros diretamente para esses recursos.

Navegue por este exemplo de máquina de estado para ver como o Step Functions controla o Lambda, o DynamoDB e o Amazon SNS conectando-se ao nome do recurso da Amazon (ARN) no campo Resource e passando Parameters para a API de serviço.

Para obter mais informações sobre como AWS Step Functions controlar outros AWS serviços, consulteUsando AWS Step Functions com outros serviços.

{ "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" } } }

Exemplo do IAM

Esse exemplo de política AWS Identity and Access Management (IAM) gerado pelo projeto de amostra inclui o menor privilégio necessário para executar a máquina de estado e os recursos relacionados. Recomendamos que você inclua apenas as permissões que forem necessárias em suas políticas do 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 obter informações sobre como configurar o IAM ao usar Step Functions com outros AWS serviços, consultePolíticas do IAM para serviços integrados.