Exemplo de orquestração do Lambda - 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á.

Exemplo de orquestração do Lambda

Este projeto de amostra demonstra como integrar AWS Lambda funções em máquinas de estado Step Functions.

Neste projeto, o Step Functions usa funções do Lambda para verificar o preço de uma ação e determinar uma recomendação de negociação de compra ou venda. O usuário então recebe essa recomendação e pode escolher entre comprar ou vender as ações. O resultado da negociação é retornado usando um tópico do SNS.

Para obter mais informações sobre integrações de serviços do Step Functions, consulte o seguinte:

nota

Este projeto de exemplo pode incorrer em cobranças.

Para novos AWS usuários, um nível de uso gratuito está disponível. Neste nível, os serviços são gratuitos abaixo de um determinado nível de uso. Para obter mais informações sobre AWS custos e o nível gratuito, consulte Preços.

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 Orchestrate Lambda functions no campo de pesquisa e escolha Orquestrar funções do Lambda 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.

    • Cinco funções do Lambda

    • Uma fila do Amazon Simple Queue Service

    • Um tópico do Amazon Simple Notification Service

    • Uma máquina de estado do AWS Step Functions

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

    A imagem a seguir mostra o gráfico do fluxo de trabalho do exemplo de projeto para Orquestrar funções do Lambda:

    Gráfico do fluxo de trabalho do exemplo de projeto Orquestrar funções do Lambda.
  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.

Etapa 2: Executar a máquina de estado

Depois que todos os recursos forem provisionados e implantados, a caixa de diálogo Iniciar execução será exibida.

  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.

Sobre a máquina de estado e sua execução

A máquina de estado neste projeto de amostra se integra AWS Lambda passando parâmetros diretamente para esses recursos, usa uma fila do Amazon SQS para gerenciar a solicitação de aprovação humana e usa um tópico do Amazon SNS para retornar os resultados da consulta.

Uma execução do Step Functions recebe um texto JSON como entrada e passa essa entrada para o primeiro estado no fluxo de trabalho. Os estados individuais recebem dados do JSON como entrada e geralmente passam dados do JSON como saída para o próximo estado. Neste exemplo de projeto, a saída de cada etapa é passada como entrada para a próxima etapa no fluxo de trabalho. Por exemplo, a etapa Gerar recomendação de compra/venda recebe a saída da etapa Verificar preço da ação como entrada. Além disso, a saída da etapa Gerar recomendação de compra/venda é passada como entrada para a próxima etapa, Solicitar aprovação humana, que imita uma etapa de aprovação humana.

nota

Para visualizar a saída retornada por uma etapa e a entrada passada para outra etapa, abra a página Detalhes da execução do fluxo de trabalho. Na seção Detalhes da etapa, visualize a entrada e a saída de cada etapa selecionada no Modo de visualização.

Para implementar uma etapa de aprovação humana, você normalmente pausa a execução do fluxo de trabalho até que um token de tarefa seja retornado. Neste exemplo de projeto, uma mensagem é passada para uma fila do Amazon SQS, que é usada como um gatilho para a função do Lambda definida para lidar com a funcionalidade de retorno de chamada. A mensagem contém um token de tarefa e a saída retornada pela etapa anterior. A função do Lambda é invocada com a carga da mensagem. A execução do fluxo de trabalho é pausada até receber o token da tarefa de volta com uma chamada de API SendTaskSuccess. Para mais informações sobre tokens de tarefa, consulte Aguardar um retorno de chamada com um token de tarefa.

O código a seguir para a função StepFunctionsSample-HelloLambda-ApproveSqsLambda mostra como ela é definida para aprovar automaticamente qualquer tarefa enviada pela fila do Amazon SQS por meio da máquina de estado do Step Functions.

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

Navegue por esta máquina de estado de exemplo para ver como o Step Functions controla o Lambda e o Amazon SQS.

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

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

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.

Exemplos do IAM

Essas políticas de exemplo AWS Identity and Access Management (IAM) geradas pelo projeto de amostra incluem 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.

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "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.