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.

Este tutorial exige uma conta da AWS
Crie uma conta gratuitaNã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.
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.
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.
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.
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 } } }
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.
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.
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.
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.
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.
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); }); } };
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.
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.
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.
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.
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.
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.
Saiba mais
Aprofunde-se
Explore o AWS Step Functions