Curso
Todo sistema complexo é o resultado da orquestração de vários subsistemas. Construir e manter esse tipo de sistema segue sendo um desafio comum, especialmente ao lidar com infraestruturas em nuvem.
Felizmente, diversas ferramentas foram desenvolvidas para simplificar a orquestração de fluxos de trabalho, independentemente do nível de complexidade. Entre elas, o AWS Step Functions se destaca pela utilidade e pelos inúmeros benefícios.
Este artigo mostra como usar o Step Functions para orquestrar workflows na AWS Cloud. Começamos explicando o que são step functions, seus benefícios e recursos-chave.
Em seguida, guiamos você pelos passos para começar com o Step Functions, da configuração do ambiente AWS à exploração da interface. Com essa base, avançamos pelo processo passo a passo de criação e deploy de um workflow real.
O que é o AWS Step Functions?
AWS Step Functions é um serviço serverless de orquestração criado para facilitar a construção de workflows visuais, permitindo coordenar funções AWS Lambda e outros recursos da AWS sem atrito.
Suas integrações são amplas, com suporte a conexões com Amazon EC2, Amazon ECS, servidores on-premise, Amazon API Gateway e filas Amazon SQS, entre outras. Isso garante workflows completos, que interagem com um ecossistema amplo de serviços AWS.
A versatilidade do AWS Step Functions o torna adequado a uma grande variedade de aplicações. Seja para gerenciar o cumprimento de pedidos, processar dados, sustentar aplicações web ou orquestrar sequências complexas de tarefas, o Step Functions oferece uma solução robusta para automação e gestão de workflows.
Recursos e benefícios
Antes de entrar nos detalhes técnicos do AWS Step Functions, vamos explorar seus principais recursos e vantagens.
Recursos principais
O Step Functions oferece diversos recursos para agilizar a criação e a gestão de workflows. Entre os principais, destacam-se:
- Integração com endpoints HTTPS: permite que workflows invoquem qualquer serviço web que suporte HTTPS, facilitando a integração de várias APIs web aos seus processos.
- Coordenação de componentes distribuídos: torna possível coordenar componentes de sistemas distribuídos, o que é crucial em aplicações complexas e com múltiplos serviços.
- Gerenciamento de estado nativo: ao monitorar minuciosamente o andamento de cada execução, preserva o estado das aplicações ao longo do fluxo e gerencia os dados transferidos entre as etapas.
- Aprovação humana: ter humanos no loop é essencial em qualquer automação. Esse recurso oferece um mecanismo para incluir intervenções manuais em um workflow automatizado quando necessário.
Benefícios
Os recursos do AWS Step Functions trazem múltiplos benefícios para desenvolvedores e organizações, melhorando fluxos operacionais e de desenvolvimento.
|
Para desenvolvedores |
Para organizações |
|
|
Exemplos reais e estudos de caso
Com base nos recursos e benefícios acima, não há dúvida de que o Step Functions pode ter um papel crucial em diferentes áreas, permitindo que empresas desenhem, automatizem e escalem seus workflows com eficiência.
Nesta seção, exploramos exemplos de como diferentes setores usam o AWS Step Functions para ganhar competitividade, inovação e eficiência.
Coordenação de microsserviços
Organizações com arquiteturas baseadas em microsserviços costumam usar o AWS Step Functions para gerenciar as interações entre esses serviços.
Uma varejista, por exemplo, pode usar Step Functions para orquestrar etapas de autenticação de usuários, gestão de estoque, processamento de pagamentos e despacho de pedidos, garantindo uma experiência de compra fluida.
Segurança e operações de TI
O AWS Step Functions pode automatizar tarefas repetitivas como verificações de segurança, atualizações de sistema e checagens de conformidade.
Em segurança de TI, por exemplo, o Step Functions pode estruturar workflows de resposta a incidentes, reduzindo erros humanos e tempos de resposta ao gerir sistematicamente cada fase, do alerta inicial à resolução.
Workflows de dados e processos de ETL
Para empresas data-intensive, o AWS Step Functions pode orquestrar processamento de dados e tarefas de ETL. Isso pode incluir fluxos para extrair dados de múltiplas fontes, transformá-los para um formato consistente e carregá-los em plataformas analíticas ou data lakes.
Uma empresa de analytics, por exemplo, pode implementar Step Functions para automatizar seu pipeline de dados, garantindo tratamento eficiente para embasar decisões estratégicas.
Operações de machine learning
O Step Functions também é útil na operação de machine learning, incluindo preparação de dados, treinamento de modelos, avaliação e deploy.
Uma healthtech pode usar Step Functions para gerenciar o pipeline de re-treinamento periódico de algoritmos de diagnóstico, mantendo a performance dos modelos conforme chegam novos dados.
Pipelines de processamento de mídia
Em mídia e entretenimento, o AWS Step Functions pode orquestrar workflows complexos de processamento, incluindo codificação de vídeo, processamento de imagens e análise de conteúdo.
Uma empresa de mídia pode aplicar Step Functions para garantir que, assim que um novo conteúdo for enviado, a conversão de formato, extração de thumbnails e enriquecimento de metadados sejam disparados automaticamente antes da publicação.
Primeiros passos com o AWS Step Functions
As seções seguintes abordam o uso do Step Functions em conjunto com outros serviços AWS. Por isso, é importante entender o básico do Step Functions antes de avançar.
O objetivo desta seção é ajudar você a começar com o AWS Step Functions, dos blocos de construção à navegação pela interface.
Blocos de construção do Step Functions
Todo sistema ou módulo é composto por subcomponentes — e com o Step Functions não é diferente. Ele se baseia em: (1) state machines e (2) tasks.
Vamos entender esses conceitos com um exemplo.
- State machines: um workflow que define a sequência de eventos, a lógica condicional e o fluxo geral de execução de tarefas. Em resumo, uma state machine pode ser vista como um workflow.
- Tasks: uma ação que executa uma atividade específica. Recebe uma entrada e gera uma saída. Exemplos: consultar um banco de dados, fazer uma chamada de API ou invocar uma função Lambda.
Considere um caso de uso que realiza o processo de matrícula em uma creche usando AWS Step Functions. Antes de mergulhar no uso do Step Functions, vamos entender as etapas gerais:
- Coletar informações de matrícula: a primeira etapa é coletar dados de matrícula dos pais. Isso pode ser feito por um formulário web, mas, no nosso caso, usamos JSON. Ao enviar, uma função Lambda é acionada e passa as informações de matrícula para a próxima etapa do fluxo.
- Verificar informações de matrícula: na sequência, uma função Lambda verifica os dados de matrícula. Ela confere se todos os campos obrigatórios foram preenchidos e se a idade da criança está dentro da faixa aceita pela creche. Se estiver tudo certo, o fluxo segue; se não, uma mensagem de erro é enviada aos pais.
- Checar disponibilidade: depois de verificar as informações, outra função Lambda checa a disponibilidade de vagas na creche. Se houver vagas, o fluxo continua; caso contrário, uma mensagem informa aos pais que a creche está lotada.
- Confirmar matrícula: a etapa final é uma função Lambda que confirma a matrícula e envia uma mensagem de confirmação aos pais, incluindo detalhes sobre a data de início e as mensalidades.
Esse workflow tem uma state machine com quatro tarefas principais, todas autoexplicativas.
checkInformationcheckAgeRangecheckSpotsAvailabilityconfirmRegistration
Workflow de matrícula em creche usando AWS Step Functions
Construindo sua primeira AWS Step Function
As seções acima trouxeram a base teórica; agora vamos para a prática — dos pré-requisitos do Step Functions à implementação e ao deploy de um workflow ponta a ponta.
Pré-requisitos para implementar Step Functions
Antes dos detalhes do caso de uso, revise os pré-requisitos para uma implementação bem-sucedida:
- Conta AWS: necessária para acessar os serviços AWS; você pode criar uma no site da AWS.
- Conhecimentos básicos de serviços AWS: familiaridade com AWS Lambda e Amazon Simple Notification Service (SNS) é necessária para este caso de uso.
- Conhecimento de JSON: entender o básico de JSON ajuda a compreender os formatos de entrada e saída.
- AWS IAM: é preciso entender o AWS Identity and Access Management (IAM) para configurar as permissões corretas das funções Lambda usadas.
- Habilidades de programação: noções de Python para escrever as funções Lambda.
Navegando na interface do AWS Step Functions
Vamos explorar a interface do Step Functions. Após fazer login na sua conta AWS, siga estes quatro passos:
- Digite “Step Functions” na barra de busca no topo.
- Selecione o ícone correspondente nos resultados.
- Clique em “Get Started” para começar a criar sua primeira step function.
- Como queremos criar nossa própria state machine, selecione a aba “Create your own”.

Quatro passos para acessar a interface do Step Functions
Após o quarto passo, você pode começar a desenhar a state machine na aba “Design”, que reúne três funcionalidades: “Actions”, “Flow” e “Patterns”.

Os três componentes da aba "Design"
- Actions: operações individuais executadas dentro do workflow, correspondendo a serviços AWS específicos, como invocar uma função Lambda, publicar uma mensagem no SNS, executar uma tarefa no ECS ou iniciar um job no AWS Glue.
- Flow: representa os construtos de controle de fluxo que ditam o caminho de execução da state machine. Elementos como "Choice" (ramificações), "Parallel" (execução concorrente), "Map" (iteração sobre uma coleção), "Pass" (no-op ou enriquecimento de dados), "Wait" (atrasos), "Success" (término com sucesso) e "Fail" (término por erro) compõem o controle de fluxo.
- Patterns: modelos e melhores práticas pré-definidos para cenários comuns, facilitando a construção de state machines complexas. Podem incluir padrões específicos para processamento de dados (S3, JSON, CSV) ou gerais, como um job poller para orquestrar execuções assíncronas.
Criando o workflow
O workflow inicial deu uma visão geral dos principais componentes da state machine. Agora, vamos revisar a implementação.
Precisaremos de quatro funções Lambda, cada uma correspondente a uma tarefa.
Os sete passos abaixo cobrem o processo para criar uma função Lambda. O processo é o mesmo para as quatro; o que muda é o conteúdo de cada uma.
Todo o código do artigo está disponível na página no GitHub. Embora o código seja simples de entender, recomendamos seguir todo o conteúdo deste artigo para uma melhor experiência.
7 passos para criar uma função Lambda
Depois de concluir os sete passos, a janela abaixo deve aparecer, exibindo informações importantes, como:
- O nome da função
- Seu link Amazon Resource Name (ARN), e
- A área integrada para implementar a lógica da função.
Detalhes da função Lambda checkInformation
Agora, repita o mesmo processo para as três funções restantes: checkAgeRange, checkSpotsAvailability e confirmRegistration.
Um exemplo de JSON de entrada está abaixo. É importante entendê-lo, pois influencia a forma como as funções são implementadas.
- O JSON contém informações sobre a criança a ser matriculada, como nome, sobrenome e data de nascimento.
- Também inclui dados dos pais, os dias da semana em que a criança irá à creche e quaisquer observações adicionais.
{
"registration_info": {
"child": {
"firstName": "Mohamed",
"lastName": "Diallo",
"dateOfBirth": "2016-07-01"
},
"parents": {
"mother": {
"firstName": "Aicha",
"lastName": "Cisse",
"email": "aicha.cisse@example.com",
"phone": "123-456-7890"
},
"father": {
"firstName": "Ibrahim",
"lastName": "Diallo",
"email": "ibrahim.diallo@example.com",
"phone": "098-765-4321"
}
},
"daysOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"specialInstructions": "Mohamed has a peanut allergy."
}
}
Cada função Lambda é descrita abaixo:
|
Função |
Descrição |
|
|
|
|
|
|
|
|
|
|
|
|
A implementação de cada função é apresentada abaixo:
checkInformation function
import json
def checkInformation(event, context):
registration_info = event['registration_info']
required_fields = ['child', 'parents', 'daysOfWeek']
for field in required_fields:
if field not in registration_info:
return {
'statusCode': 400,
'body': f'Missing required field: {field}'
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkAgeRange function
import json
import datetime
def checkAgeRange(event, context):
registration_info = json.loads(event['body'])
dob = registration_info['child']['dateOfBirth']
today = datetime.date.today()
dob_date = datetime.datetime.strptime(dob, '%Y-%m-%d').date()
age = today.year - dob_date.year - ((today.month, today.day) < (dob_date.month, dob_date.day))
if age < 2 or age > 5:
return {
'statusCode': 400,
'body': json.dumps('Child is not within the acceptable age range for this daycare.')
}
registration_info['child']['age'] = age
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkSpotsAvailability function
import json
def checkSpotsAvailability(event, context):
registration_info = json.loads(event['body'])
spots_available = 20 # This should be dynamically determined, not hardcoded
if spots_available <= 0:
return {
'statusCode': 400,
'body': json.dumps('No spots available in the daycare.')
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
confirmRegistration function
import json
import datetime
def confirmRegistration(event, context):
registration_info = json.loads(event['body'])
age = registration_info['child']['age'] # This was added in the checkAgeRange function
if age >= 2 and age < 3:
fees = 800
elif age >= 3 and age < 4:
fees = 750
elif age >= 4 and age < 5:
fees = 700
else: # age >= 5
fees = 650
start_date = datetime.date.today() + datetime.timedelta(weeks=2)
confirmation_details = {
'fees': fees,
'start_date': start_date.isoformat()
}
response = {**registration_info, **confirmation_details}
return {
'statusCode': 200,
'body': json.dumps(response)
}
Com tudo pronto, podemos criar nossa state machine da creche usando a interface gráfica do Step Functions.
A state machine final está abaixo. Vamos entender as principais etapas que levaram a esse workflow:

State machine do caso de uso da creche
Antes de começarmos, é importante notar que o campo statusCode da saída de cada função Lambda define o próximo estado da state machine.
- Se o valor for 200, a checagem teve sucesso e seguimos para a próxima etapa.
- Se o
statusCodefor 400, a checagem falhou e retornamos a mensagem correspondente, de acordo com a função executada.
Check Information
- A state machine começa aqui.
- Uma função Lambda verifica se todas as informações obrigatórias estão presentes no formulário de matrícula.
- Se estiver tudo completo, passamos para a próxima etapa. Caso contrário, finaliza em estado de falha informando que os dados estão incompletos.
Check Age Range
- Essa etapa é alcançada apenas se a verificação anterior for bem-sucedida.
- Outra função Lambda checa se a idade da criança está dentro da faixa aceita pela creche.
- Se estiver na faixa, seguimos; se não, finaliza com falha informando idade inválida.
Check Spots Availability
- Só chegamos aqui se a checagem de idade tiver sido aprovada.
- Uma função Lambda verifica se há vagas disponíveis.
- Se houver, seguimos; se não, finaliza com falha informando que não há vagas.
Confirm Registration
- Etapa final, alcançada apenas se houver vagas.
- Uma função Lambda confirma a matrícula e calcula as mensalidades com base na idade da criança.
- O processo termina aqui com sucesso, confirmando a matrícula.
Para saber mais sobre funções Lambda, o curso Streaming Data with AWS Kinesis and Lambda ensina a trabalhar com dados em streaming usando tecnologias serverless na AWS.
Criar roles do IAM
O próximo passo é definir as roles do IAM para que as step functions possam invocar nossas funções Lambda. Siga estes passos:

Primeiros nove passos para criar uma role do IAM

10º e 11º passos para criar uma role do IAM
Você pode atribuir essa role do IAM à state machine a partir da aba “Config”, conforme abaixo.

3 passos para conceder a role do IAM
Após salvar, você deverá ver a mensagem abaixo indicando que deu tudo certo.

Mensagem de sucesso da criação da state machine
Quando estiver satisfeito com a state machine, clique em Create no canto superior direito para criá-la.
Ilustração da execução da state machine
Fazendo deploy e testando seu workflow
Com o workflow em produção, é hora de testar a state machine. Vamos avaliar dois cenários:
- Um caso de falha com faixa etária válida, em que a criança que tentamos matricular tem mais de 5 anos. Isso corresponde ao JSON inicial.
- Um caso de sucesso em que a criança tem 3 anos.

Resultado de um caso de sucesso

Resultado de um caso de falha
Otimizando seu Step Functions
Otimizar qualquer processo começa pela adoção de boas práticas, que elevam desempenho e reduzem custos. As recomendações abaixo ajudam você a tirar o máximo do AWS Step Functions.
- Boas práticas de performance: incluem minimizar transições de estado, usar timeouts adequados e otimizar suas funções AWS Lambda.
- Boas práticas de custo-benefício: escolher o tipo certo de state machine (Standard ou Express), gerenciar custos do AWS Lambda e compreender a precificação do Step Functions.
Conclusão
Este artigo trouxe um guia completo para entender e usar o AWS Step Functions. Começamos apresentando o serviço, seus recursos e benefícios.
Depois, mostramos como configurar o ambiente AWS e navegar pela interface do AWS Step Functions.
Na sequência, passamos pela construção da sua primeira AWS Step Function, da criação do workflow ao deploy e testes. Também exploramos recursos avançados e casos de uso, e encerramos com dicas de otimização para máxima eficiência e economia.
Fechando
Nossos artigos AWS, Azure e GCP: comparação de serviços para data science e IA e Introduction to AWS Boto in Python podem ser excelentes próximos passos.
O primeiro compara os principais serviços necessários para trabalhos com dados e IA — de engenharia e análise de dados a data science e criação de aplicações. Esse cheat sheet ajuda a entender o panorama de serviços de nuvem para data science e IA nas três grandes plataformas.
O segundo oferece uma introdução simples ao AWS Boto em Python, mostrando como usar a nuvem para otimizar seu fluxo de dados. É um ótimo recurso para quem quer automatizar operações AWS com Python.
A AWS tem muitos serviços, e o segredo para dominar o AWS Step Functions é entender os requisitos da sua aplicação e combinar os serviços e recursos certos para atendê-los.
A Zoumana desenvolve ferramentas de IA LLM para ajudar as empresas a realizar due diligence de sustentabilidade e avaliações de risco. Anteriormente, ele trabalhou como cientista de dados e engenheiro de aprendizado de máquina na Axionable e na IBM. Zoumana é o fundador da plataforma de tecnologia educacional de aprendizagem entre pares ETP4Africa. Ele escreveu mais de 20 tutoriais para o DataCamp.




