Crie um exemplo de padrão de retorno de chamada com Amazon SQSSNS, Amazon e 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á.

Crie um exemplo de padrão de retorno de chamada com Amazon SQSSNS, Amazon e Lambda

Este exemplo de projeto demonstra como ter AWS Step Functions faça uma pausa durante uma tarefa e espere que um processo externo retorne um token de tarefa que foi gerado quando a tarefa foi iniciada.

Quando esse projeto de exemplo é implantado, e uma execução é iniciada, as seguintes etapas ocorrem:

  1. Step Functions passa uma mensagem que inclui um token de tarefa para uma fila do Amazon Simple Queue Service (AmazonSQS).

  2. O Step Functions, então, pausa, aguardando o retorno desse token.

  3. A SQS fila da Amazon aciona um AWS Lambda função que chama SendTaskSuccesscom o mesmo token de tarefa.

  4. Quando o token é recebido, o fluxo de trabalho continua.

  5. A "Notify Success" tarefa publica uma mensagem do Amazon Simple Notification Service (AmazonSNS) informando que o retorno de chamada foi recebido.

Para saber como implementar o padrão de retorno de chamada no Step Functions, consulte Aguarde um retorno de chamada com o token de tarefa.

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

Etapa 1: Criar a máquina de estado

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

  2. Digite Callback pattern example no campo de pesquisa e escolha Exemplo de padrão de retorno de chamada nos resultados da pesquisa que são retornados.

  3. Escolha Próximo para continuar.

  4. Escolha Executar uma demonstração para criar um ready-to-deploy fluxo de trabalho e somente leitura, ou escolha Criar nele para criar uma definição de máquina de estado editável na qual você possa criar e implantar posteriormente.

    ‎Este projeto de exemplo implementa os recursos a seguir.

    • Uma fila de SQS mensagens da Amazon.

    • Uma função Lambda que chama a ação Step FunctionsAPI. SendTaskSuccess

    • Um SNS tópico da Amazon para notificar sobre o sucesso ou o fracasso de uma tarefa, indicando se o fluxo de trabalho pode ou não continuar.

    • Uma AWS Step Functions máquina de estado

    • Relacionado AWS Identity and Access Management (IAM) funções

    A imagem a seguir mostra o gráfico do fluxo de trabalho para o projeto de exemplo de Exemplo do padrão de retorno de chamada:

    Gráfico ilustrativo do fluxo de trabalho Gerenciar um trabalho em lotes.
  5. Escolha Usar modelo para continuar com a seleção.

As próximas etapas dependem da sua escolha anterior:

  1. Execute uma demonstração — Você pode revisar a máquina de estado antes de criar um projeto somente para leitura com recursos implantados pelo AWS CloudFormation para o seu Conta da AWS.

    Você pode visualizar a definição da máquina de estado e, quando estiver pronto, escolher Implantar e executar para implantar o projeto e criar os recursos.

    A implantação pode levar até 10 minutos para criar recursos e permissões. Você pode usar o link Stack ID para monitorar o progresso no AWS CloudFormation.

    Após a conclusão da implantação, você deverá ver sua nova máquina de estado no console.

  2. Desenvolva com base nisso — você pode revisar e editar a definição do fluxo de trabalho. Talvez seja necessário definir valores para espaços reservados no projeto de amostra antes de tentar executar seu fluxo de trabalho personalizado.

nota

Cobranças padrão podem ser aplicadas aos serviços implantados em sua conta.

Etapa 2: Executar a 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) Insira um nome de execução personalizado para substituir o padrão gerado.

      ASCIINão-nomes e registro

      Step Functions aceita nomes para máquinas de estado, execuções, atividades e rótulos que não contenham ASCII caracteres. Como esses caracteres não funcionarão com a Amazon CloudWatch, recomendamos usar somente ASCII caracteres para que você possa acompanhar as métricas CloudWatch.

    2. (Opcional) Na caixa Entrada, insira os valores de entrada comoJSON. Você pode pular essa etapa se estiver executando uma demonstração.

    3. Selecione Iniciar execução.

    O console Step Functions direcionará você para uma página de detalhes da execução, na qual você pode escolher estados na visualização do gráfico para explorar informações relacionadas no Detalhes da etapa painel.

    Por exemplo, para analisar como o Step Functions progrediu no fluxo de trabalho e recebeu um retorno de chamada da AmazonSQS, revise as entradas na tabela de Eventos. A imagem a seguir mostra a saída de execução da etapa Notificar Sucesso. Também mostra os cinco primeiros eventos do histórico de eventos de execução. Expanda cada evento para ver mais detalhes sobre esse evento.

    Trecho da saída de execução da etapa “Notificar sucesso”, mostrando cinco eventos.

Exemplo de Retorno de Chamada do Lambda

Para ver como os componentes desse projeto de amostra funcionam juntos, veja os recursos que foram implantados em seu AWS conta. Por exemplo, veja a seguir a função do Lambda que chama o Step Functions com o token de tarefa.

console.log('Loading function'); const aws = require('aws-sdk'); exports.lambda_handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };