com o AWS Step Functions e o Amazon SQS

Nível: intermediário
Duração: 10 minutos

Neste tutorial, você aprenderá a usar o AWS Step Functions e o Amazon SQS para projetar e executar um fluxo de trabalho sem servidor que orquestra um microsserviço baseado em fila de mensagens. O Step Functions é um serviço de orquestração sem servidor que permite coordenar com facilidade vários serviços da AWS em fluxos de trabalho fáceis de depurar e de alterar. O Amazon SQS é o serviço da AWS que permite a comunicação de componentes da aplicação na nuvem.

Este tutorial simulará solicitações de verificação de estoque provenientes de pedidos recebidos em uma aplicação de comércio eletrônico como parte de um fluxo de trabalho de processamento de pedidos. O Step Functions enviará solicitações de verificação de estoque para uma fila no SQS. A função do AWS Lambda atuará como seu microsserviço de estoque que usa uma fila para armazenar solicitações em buffer. Ao recuperar uma solicitação, ela verificará o estoque e retornará o resultado ao Step Functions. Uma tarefa configurada dessa maneira no Step Functions é chamada de padrão de retorno de chamada. Os padrões de retorno de chamada permitem integrar tarefas assíncronas no fluxo de trabalho, como o microsserviço de verificação de estoque deste tutorial.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-diagram

Este tutorial exige uma conta da AWS

Crie uma conta gratuita

Não há cobranças adicionais para o AWS Step Functions nem para o Amazon SQS. Os recursos criados neste tutorial estão qualificados para o nível gratuito.

Veja os detalhes do nível gratuito da AWS »

a. Abra o Console de Gerenciamento da AWS para poder manter este guia detalhado aberto. Quando a tela carregar, digite seu nome de usuário e senha para começar. Na caixa de texto de pesquisa, digite SQS e selecione Simple Queue Service para abrir o console do serviço.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1a

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1a

b. Se a página inicial do console do SQS for exibida, como mostrado na captura de tela, clique em Comece a usar agora. Caso não veja essa página, pule para a próxima etapa.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1b

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1b

Nesta etapa, você criará e configurará uma fila do Amazon SQS. Uma fila é um buffer confiável e altamente escalável que armazena mensagens em trânsito entre aplicações ou microsserviços distribuídos. As filas ajudam a desacoplar aplicações, conectar microsserviços, agrupar tarefas em lotes e armazenar notificações.
Neste tutorial, nosso caso de uso do SQS simulará o armazenamento de solicitações de verificação de estoque provenientes de pedidos recebidos em uma aplicação de comércio eletrônico.


a. Primeiro, criaremos uma fila simples que armazenará os pedidos criados na loja. Digite Orders no campo Nome da fila.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2a

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2a

b. Neste tutorial, não exigimos uma ordem rigorosa. Portanto, não mudaremos o tipo da fila. Deixe a opção Fila padrão selecionada.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2b

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2b

c. Você pode modificar configurações da fila como período de retenção, tamanho máximo de mensagens e atrasos de entrega. Neste tutorial, manteremos os parâmetros padrão. Clique em Criar fila rápido.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2c

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2c

d. A nova fila é criada e selecionada na lista de filas.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2d

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2d

Sua próxima etapa é projetar um fluxo de trabalho que descreva como você deseja que os pedidos de comércio eletrônico sejam processados. Os fluxos de trabalho descrevem um processo como uma série de tarefas distintas que podem ser repetidas continuamente.
Você projetará seu fluxo de trabalho no AWS Step Functions. Seu fluxo de trabalho solicitará a verificação do estoque a partir de um microsserviço. Muitos microsserviços usam uma fila para receber solicitações. Neste tutorial, você usará uma função do AWS Lambda para representar o microsserviço.


a. Abra o console do AWS Step Functions. Selecione Criar com trechos de código e dê à sua máquina de estado o nome de InventoryStateMachine.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3c

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3c

b. Substitua o conteúdo da janela Definição de máquina de estado pela definição de máquina de estado da Amazon States Language (ASL) a seguir. A Amazon States Language é uma linguagem estruturada baseada em JSON usada para definir a máquina de estado.

Essa máquina de estado usa um estado de tarefa para colocar uma mensagem em uma fila do SQS. Esse estado de tarefa é configurado como um padrão de retorno de chamada. Se você anexar .waitForTaskToken ao seu recurso, o Step Functions adicionará um token da tarefa à carga útil JSON e aguardará um retorno de chamada. O microsserviço pode retornar um resultado ao Step Functions chamando a API Step Functions.

{
  "Comment": "An example of the Amazon States Language for starting a callback task.",
  "StartAt": "Check Inventory",
  "States": {
    "Check Inventory": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
      "Parameters": {
        "QueueUrl": "<INSERT SQS QUEUE URL HERE>",
        "MessageBody": {
          "MessageTitle": "Callback Task started by Step Functions",
          "TaskToken.$": "$$.Task.Token"
        }
      },
      "Next": "Notify Success",
      "Catch": [
      {
        "ErrorEquals": [ "States.ALL" ],
        "Next": "Notify Failure"
      }
      ]
    },
    "Notify Success": {
      "Type": "Pass",
      "Result": "Callback Task started by Step Functions succeeded",
      "End": true
    },
    "Notify Failure": {
      "Type": "Pass",
      "Result": "Callback Task started by Step Functions failed",
      "End": true
    }
  }
}
tmt-orchestrate-microservices-with-message-queues-on-step-functions-3d

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3d

c. Copie o URL da fila do SQS do console do SQS e cole-o na definição de sua máquina de estado.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3e

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3e

d. Clique no botão Atualizar para que o Step Functions converta a definição de máquina de estado da ASL em um fluxo de trabalho visual. Você pode verificar facilmente se o processo foi descrito corretamente revisando o fluxo de trabalho visual. Quando um microsserviço retornar um resultado, a máquina de estado avançará pela ramificação de êxito. Se algo der errado, você pode capturar a exceção e desviar para a ramificação correta a fim de tomar medidas corretivas.

Clique em Próximo.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3f

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3f

e. Em seguida, você adicionará uma função do IAM ao seu fluxo de trabalho. Selecione Criar uma função do IAM para mim e nomeie-a como inventory-state-machine-role. O Step Functions vai analisar seu fluxo de trabalho e gerar uma política do IAM que inclui os recursos usados pelo seu fluxo de trabalho. Clique em Criar máquina de estado. Você deve ver uma faixa verde indicando que a máquina de estado foi criada com êxito.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3g

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3g

O AWS IAM é um web service que ajuda a controlar o acesso a recursos da AWS com segurança. Nesta etapa, você criará uma função do IAM que permitirá ao Step Functions acessar o SQS.


a. Abra o Console de Gerenciamento da AWS em outra janela do navegador. Quando a tela carregar, digite IAM na barra de pesquisa e selecione IAM para abrir o console do serviço.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4a

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4a

b. Clique em Funções e em Criar função.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4b

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4b

c. Na tela Criar funções, deixe a opção Serviço da AWS marcada, selecione Lambda e clique em Próximo: Permissões.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4c

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4c

d. Na tela Criar função, anexe
as políticas AmazonSQSFullAccess e AWSStepFunctionsFullAccess. Clique em Próximo: Tags e em Próximo: Revisar.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4d

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4d

e. Como nome da função, digite inventory-lambda-role e clique em Criar função.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4e

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4e

Nesta etapa, você criará uma função do Lambda que simulará um microsserviço de estoque. A função do Lambda recupera as mensagens do SQS e retorna uma mensagem ao Step Functions que representa o resultado da solicitação.


a. Clique em Serviços, digite Lambda na barra de pesquisa e selecione Lambda para abrir o console do serviço.

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5a

b. Clique em Criar função.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5b

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5b

c. Deixe a opção Criar do zero marcada. Em seguida, configure sua primeira função do Lambda da seguinte maneira:

Como nome, digite Inventory.
Em Ambiente de execução, selecione Node.js 8.10.
Na seção Função, selecione Usar uma função existente.

Selecione inventory-lambda-role na lista
Clique em Criar função.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5c

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5c

d. Substitua o conteúdo da janela Código de função pelo código a seguir e clique em Salvar.

console.log('Loading function');
          const aws = require('aws-sdk');

          exports.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);
                  });
              }
          };
tmt-orchestrate-microservices-with-message-queues-on-step-functions-5d

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5d

e. Selecione o trigger do SQS. Ajuste o controle para Habilitar para sua fila Orders. Clique em Adicionar e, em seguida, clique em Salvar.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5e

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5e

O seu fluxo de trabalho sem servidor está pronto para ser executado. Uma execução da máquina de estado é uma instância do fluxo de trabalho e ocorre sempre que uma máquina de estado do Step Functions é executada e realiza as suas tarefas. Cada máquina de estado do Step Functions pode realizar múltiplas execuções simultâneas que podem ser iniciadas usando o console do Step Functions (que você fará a seguir) ou usando os AWS SDKs, ações da API do Step Functions ou a CLI da AWS. As execuções recebem entrada JSON e produzem saídas JSON.


a. Clique em Serviços, digite Step na barra de pesquisa e selecione Step Functions para abrir o console do serviço.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6a

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6a

b. Na tela Máquinas de estado, clique em InventoryStateMachine.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6b

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6b

c. Clique em Iniciar execução.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6c

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6c

d. Uma nova caixa de diálogo de execução é exibida, onde é possível inserir informações para a máquina de estado. Essa máquina de estado não depende da entrada. Você pode usar a entrada padrão. Clique em Iniciar execução.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6d

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6d

e. À medida que o fluxo de trabalho é executado, cada etapa mudará de cor no painel Fluxo de trabalho visual. Aguarde alguns segundos para que a execução seja concluída. Em seguida, no painel Detalhes da execução, clique em Entrada e Saída para ver as entradas e os resultados do seu fluxo de trabalho.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6e

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6e

f. O Step Functions permite inspecionar cada etapa da execução do fluxo de trabalho, incluindo as entradas e saídas de cada estado. Clique em cada tarefa do fluxo de trabalho e expanda os campos Entrada e Saída em Detalhes da etapa. Você poderá ver que a carga útil de entrada na máquina de estado é passada de uma etapa para a outra, sendo atualizada à medida que cada etapa é concluída.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6f

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6f

g. Role para baixo até a seção Histórico de eventos de execução. Clique em cada etapa de execução para ver como o Step Functions chamou o SQS e passou as cargas de trabalho entre as etapas.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6g

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6g

h. Dependendo da saída de sua InventoryStateMachine, o fluxo de trabalho pode ter sido encerrado com êxito ou falha.
Em um cenário real, você pode optar por executar a tarefa novamente ou executar outras ações, dependendo da mensagem de erro recebida.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6h

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6h

Nesta etapa, você encerrará os recursos relacionados ao AWS Step Functions e ao AWS Lambda.
Importante: é recomendável encerrar os recursos que não estão em uso, pois isso reduz custos. Pode haver cobranças caso os recursos não sejam encerrados.


a. Na parte superior da janela do console do AWS Step Functions, clique em Máquinas de estado.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7a

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7a

b. Na janela Máquinas de estado, clique em InventoryStateMachine e selecione Excluir. Confirme a ação selecionando Excluir máquina de estado na caixa de diálogo. Sua máquina de estado será excluída em um ou dois minutos, assim que o Step Functions confirmar que as execuções em andamento foram concluídas.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7b

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7b

c. Em seguida, você excluirá as funções do Lambda. Clique em Serviços no menu do Console de Gerenciamento da AWS e selecione Lambda.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7c

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7c

d. Na tela Funções, clique na função Inventory criada para este tutorial. Em seguida, selecione Ações e Excluir. Confirme a exclusão clicando novamente em Excluir.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7d

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7d

e. Por último, você excluirá todas as funções do IAM. Clique em Serviços no menu do Console de Gerenciamento da AWS e selecione IAM.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7e

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7e

f. Selecione as funções do IAM que você criou para este tutorial e clique em Excluir função. Confirme a exclusão clicando em Sim, excluir na caixa de diálogo.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7f

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7f

g. Na lista de filas, escolha a fila Orders. Em Ações da fila, selecione Excluir fila.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7g

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7g

h. A caixa de diálogo Excluir filas é exibida. Você pode excluir a fila, mesmo que ainda existam mensagens nela. Selecione Sim, excluir fila. A fila é excluída.

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7h

(clique para ampliar)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7h

Você orquestrou um microsserviço na nuvem com uma fila de mensagens usando o AWS Step Functions e o Amazon SQS. O Step Functions é ideal quando você precisa coordenar os recursos da aplicação, quando produtividade e agilidade são as principais considerações.

Agora que você aprendeu a orquestrar microsserviços baseados em filas, poderá avançar para o próximo tutorial em que aprenderá como usar o Step Functions para fazer o tratamento de erros. Você criará uma máquina de estado com os campos Tentar novamente e Detectar correspondentes aos códigos de resposta de uma simulação de API baseada no tipo de mensagem de erro, um método chamado de processamento de erro de função.