Orquestrar funções do Lambda com o Step Functions
As funções Lambda que gerenciam várias tarefas, implementam uma lógica de novas tentativas ou contêm uma lógica de ramificação são antipadrões. Em vez disso, recomendamos escrever funções do Lambda que executem tarefas únicas e usar o AWS Step Functions para orquestrar os fluxos de trabalho da aplicação.
Por exemplo, o processamento de um pedido pode exigir que os detalhes sejam válidos, os níveis de inventário sejam verificados, o pagamento seja processado e uma fatura seja gerada. Escreva funções do Lambda separadas para cada tarefa e use o Step Functions para gerenciar o fluxo de trabalho. O Step Functions coordena o fluxo de dados entre as funções e lida com os erros em cada etapa. Essa separação torna seus fluxos de trabalho mais fáceis de visualizar, modificar e manter à medida que se tornam mais complexos.
Quando usar o Step Functions com o Lambda
Os cenários a seguir são bons exemplos de quando usar o Step Functions para orquestrar as aplicações baseadas no Lambda.
Processamento sequencial
O processamento sequencial ocorre quando uma tarefa deve ser concluída antes que a próxima tarefa possa ser iniciada. Por exemplo, em um sistema de processamento de pedidos, o processamento do pagamento não pode começar até que a validação do pedido seja concluída, e a geração da fatura deve aguardar a confirmação do pagamento. Escreva funções do Lambda separadas para cada tarefa e use o Step Functions para gerenciar o fluxo de trabalho e lidar com o fluxo de dados entre as funções.
Uma única função do Lambda gerencia todo o fluxo de trabalho de processamento de pedidos:
Invocar outras funções Lambda em sequência
Analisar e validar respostas de cada função
Implementar a lógica de tratamento e recuperação de erros
Gerenciar o fluxo de dados entre as funções
Use duas funções Lambda: uma para validar o pedido e outra para processar o pagamento. O Step Functions coordena essas funções:
Executando tarefas na sequência correta
Passando dados entre funções
Implementando tratamento de erros em cada etapa
Usando estados de Escolha para garantir que somente pedidos válidos prossigam para o pagamento
exemplo gráfico do fluxo de trabalho

Tratamento de erros complexos
Embora o Lambda forneça recursos de novas tentativas para invocações assíncronas e mapeamentos de origens de eventos, o Step Functions oferece tratamento de erros mais sofisticado para fluxos de trabalho complexos. Você pode configurar novas tentativas automáticas com recuo exponencial e definir diferentes políticas de novas tentativas para diferentes tipos de erros. Quando as novas tentativas se esgotarem, use Catch
para rotear os erros para um estado de fallback. Isso é particularmente útil quando você precisa de um tratamento de erros no nível de fluxo de trabalho que coordene várias funções e serviços.
Para saber mais sobre como tratar erros de função do Lambda em uma máquina de estado, consulte Handling errors
Uma única função do Lambda lida com todos os itens a seguir:
-
Tentativas de chamar um serviço de processamento de pagamentos
-
Se o serviço de pagamentos não estiver disponível, a função aguardará e tentará novamente mais tarde.
-
Implementa um recuo exponencial personalizado para o tempo de espera
-
Depois que todas as tentativas falham, captura o erro e escolhe outro fluxo
Use uma única função do Lambda com foco exclusivamente no processamento de pagamentos. O Step Functions gerencia o tratamento de erros ao:
Repetir automaticamente as tarefas que falharam com períodos de recuo configuráveis
Aplicar políticas de novas tentativas diferentes com base nos tipos de erros
Rotear diferentes tipos de erros para os estados de fallback adequados
Manter o estado e o histórico de tratamento de erros
exemplo gráfico do fluxo de trabalho

Fluxos de trabalho condicionais e aprovações humanas
Use o estado de escolha do Step Functions para rotear fluxos de trabalho com base na saída da função e o sufixo waitForTaskToken para pausar os fluxos de trabalho para decisões humanas. Por exemplo, para processar uma solicitação de aumento do limite de crédito, use uma função do Lambda para avaliar os fatores de risco. Depois, use o Step Functions para encaminhar solicitações de alto risco para aprovação manual e solicitações de baixo risco para aprovação automática.
Para implantar um exemplo de fluxo de trabalho que use um padrão de integração de token de tarefa de retorno de chamada, consulte Callback with Task Token
Uma única função do Lambda gerencia um fluxo de trabalho de aprovação complexo ao:
Implementar uma lógica condicional aninhada para avaliar solicitações de crédito
Invocar diferentes funções de aprovação com base nos valores da solicitação
Gerenciar vários caminhos de aprovação e pontos de decisão
Rastrear o estado das aprovações pendentes
Implementar uma lógica de tempo limite e de notificação para aprovações
Use três funções do Lambda: uma para avaliar o risco de cada solicitação, uma para aprovar solicitações de baixo risco e outra para encaminhar solicitações de alto risco a um gerente para análise. O Step Functions gerencia o fluxo de trabalho:
Usando estados de Escolha para rotear solicitações com base no valor e no nível de risco
Pausar a execução enquanto aguarda a aprovação humana
Gerenciar tempos limite para aprovações pendentes
Fornecer visibilidade do estado atual de cada solicitação
exemplo gráfico do fluxo de trabalho

Processamento paralelo
O Step Functions fornece três maneiras de lidar com processamento em paralelo:
-
O estado Em paralelo executa várias ramificações do fluxo de trabalho simultaneamente. Use isso quando precisar executar funções diferentes em paralelo, como gerar miniaturas enquanto extrai metadados de imagem.
-
O estado Mapa em linha processa matrizes de dados com até 40 iterações simultâneas. Use isso para conjuntos de dados pequenos e médios nos quais que você precisa realizar a mesma operação em todos os itens.
-
O estado de Mapa distribuído lida com o processamento em paralelo de grande escala, com até 10.000 execuções simultâneas, sendo compatível com matrizes JSON e fontes de dados do Amazon Simple Storage Service (Amazon S3). Use isso ao processar grandes conjuntos de dados ou quando precisar de mais simultaneidade.
Uma única função do Lambda tenta gerenciar o processamento em paralelo ao:
Invocar simultaneamente várias funções de processamento de imagem
Implementar uma lógica personalizada de execução em paralelo
Gerenciar limites de tempo e tratamento de erros para cada tarefa paralela
Coletar e agregar resultados de todas as funções
Use três funções do Lambda: uma para criar uma imagem em miniatura, outra para adicionar uma marca d'água e outra para extrair os metadados. O Step Functions gerencia essas funções ao:
Executar todas as funções simultaneamente usando o estado Em paralelo
Coletar os resultados de cada função para uma matriz ordenada
Gerenciar limites de tempo e tratamento de erros em todas as execuções paralelas
Prosseguir apenas quando todas as ramificações paralelas são concluídas
exemplo gráfico do fluxo de trabalho

Quando não usar o Step Functions com o Lambda
Nem todas as aplicações baseadas no Lambda se beneficiam com o uso do Step Functions. Considere esses cenários ao escolher a arquitetura da sua aplicação.
Uma aplicação simples
Para aplicações que não exigem orquestração complexa, o uso do Step Functions pode adicionar complexidade desnecessária. Por exemplo, se estiver simplesmente processando as mensagens de uma fila do Amazon SQS ou respondendo aos eventos do Amazon EventBridge, você poderá configurar esses serviços para invocar as funções do Lambda diretamente. Da mesma forma, se a aplicação consistir em apenas uma ou duas funções do Lambda com tratamento simples de erros, a invocação direta do Lambda ou as arquiteturas orientadas por eventos podem ser mais simples de implantar e manter.
Processamento de dados complexos
Você pode usar o estado de Mapa distribuído do Step Functions para processar simultaneamente grandes conjuntos de dados do Amazon S3 com funções do Lambda. Isso é eficaz para muitas workloads paralelas de grande escala, incluindo processamento de dados semiestruturados, como arquivos JSON ou CSV. Porém, para transformações de dados mais complexas ou para analytics avançada, considere estas alternativas:
-
Pipelines de transformação de dados: use AWS Glue para trabalhos de ETL que processam dados estruturados ou semiestruturados de várias fontes. O AWS Glue é particularmente útil quando precisar de recursos integrados de gerenciamento de catálogo de dados e esquemas.
-
Análise de dados: use o Amazon EMR para data analytics em escala de petabytes, especialmente quando precisar de ferramentas do ecossistema Apache Hadoop ou para workloads de machine learning que excedam os limites de memória do Lambda.
Workloads com uso intenso de CPU
Embora o Step Functions possa orquestrar tarefas com uso intensivo de CPU, as funções do Lambda talvez não sejam adequadas para essas workloads devido aos seus recursos limitados de CPU. Para operações computacionalmente intensivas em seus fluxos de trabalho, considere estas alternativas:
-
Orquestração de contêineres: use o Step Functions para gerenciar as tarefas do Amazon Elastic Container Service (Amazon ECS) para obter recursos computacionais mais consistentes e escaláveis.
-
Processamento em lotes: integre o AWS Batch ao Step Functions para gerenciar trabalhos em lotes com uso intensivo de computação que exijam uso contínuo da CPU.