Orquestrar funções do Lambda com o Step Functions - AWS Lambda

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
Gráfico de fluxo de trabalho do Step Functions mostrando a validação do pedido, um estado de escolha e o processamento do pagamento com caminhos de sucesso e falha

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 no The AWS Step Functions Workshop.

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:

exemplo gráfico do fluxo de trabalho
O gráfico de fluxo de trabalho do Step Functions para processamento de pagamentos com três resultados: pagamento bem-sucedido, pagamento inválido e falha no pagamento

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 no The AWS Step Functions Workshop.

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
Gráfico do fluxo de trabalho do Step Functions mostrando a avaliação da solicitação de crédito sendo ramificada para aprovação automática ou aprovação do gerente com base no risco

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
Gráfico de fluxo de trabalho do Step Functions com três funções do Lambda paralelas: criar miniatura, adicionar marca d'água e extrair metadados

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.