Mapeamentos da origem do evento com funções duráveis
As funções duráveis funcionam com todos os mapeamentos da origem do evento do Lambda Configure mapeamentos da origem do evento para funções duráveis da mesma forma que você os configura para funções padrão. Os mapeamentos da origem do evento sondam automaticamente fontes de eventos como o Amazon SQS, o Kinesis e o DynamoDB Streams e invocam sua função com lotes de registros.
Os mapeamentos da origem do evento são úteis para funções duráveis que processem fluxos ou filas com fluxos de trabalho complexos de várias etapas. Por exemplo, é possível criar uma função durável que processe mensagens do Amazon SQS com novas tentativas, chamadas de API externas e aprovações humanas.
Como os mapeamentos da origem do evento invocam as funções duráveis
Os mapeamentos da origem do evento invocam as funções duráveis de forma síncrona, aguardando a conclusão da execução durável completa antes de processar o próximo lote ou marcar os registros como processados. Se o tempo total de execução durável exceder 15 minutos, a execução expirará e falhará. O mapeamento da origem do evento recebe uma exceção de tempo limite e a trata de acordo com sua configuração de nova tentativa.
Limite de execução de 15 minutos
Quando as funções duráveis são invocadas por mapeamentos da origem do evento, a duração total da execução durável não pode exceder 15 minutos. Esse limite se aplica a toda a execução durável, do início à conclusão, e não apenas às invocações de funções individuais.
Esse limite de 15 minutos é separado do tempo limite da função do Lambda (também de 15 minutos, no máximo). O tempo limite da função controla por quanto tempo cada invocação individual pode ser executada, enquanto o tempo limite de execução durável controla o tempo total decorrido do início à conclusão da execução.
Cenários de exemplo:
-
Válido: uma função durável processa uma mensagem do Amazon SQS com três etapas, cada uma levando 2 minutos, depois espera 5 minutos antes de concluir a etapa final. Tempo total de execução: 11 minutos. Isso funciona porque o total é inferior a 15 minutos.
-
Inválido: uma função durável processa uma mensagem do Amazon SQS, conclui o processamento inicial em 2 minutos e, em seguida, espera 20 minutos por um retorno de chamada externo antes de concluir. Tempo total de execução: 22 minutos. Isso excede o limite de 15 minutos e falhará.
-
Inválido: uma função durável processa um registro do Kinesis com várias operações de espera, totalizando 30 minutos entre as etapas. Embora cada invocação individual seja concluída rapidamente, o tempo total de execução excede 15 minutos.
Importante
Configure seu tempo limite de execução durável para 15 minutos ou menos ao usar mapeamentos da origem do evento, caso contrário, a criação do mapeamento da origem do evento falhará. Se seu fluxo de trabalho exigir tempos de execução mais longos, use o padrão de função intermediária descrito abaixo.
Configuração de mapeamentos da origem do evento
Configure mapeamentos da origem do evento para funções duráveis usando o console do Lambda, a AWS CLI ou SDKs da AWS. Todas as propriedades padrão do mapeamento da origem do evento se aplicam às funções duráveis:
aws lambda create-event-source-mapping \ --function-name arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1 \ --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \ --batch-size 10 \ --maximum-batching-window-in-seconds 5
Lembre-se de usar um ARN qualificado (com número de versão ou alias) ao configurar mapeamentos da origem do evento para funções duráveis.
Tratamento de erros com o mapeamento da origem do evento
Os mapeamentos da origem do evento fornecem tratamento de erros integrado que funciona com funções duráveis:
-
Comportamento de novas tentativas: se a invocação inicial falhar, o mapeamento da origem do evento tentará novamente de acordo com sua configuração de nova tentativa. Configure o máximo de tentativas e intervalos de novas tentativas com base em seus requisitos.
-
Filas de mensagens não entregues: configure uma fila de mensagens não entregues para capturar registros que falhem após todas as novas tentativas. Isso evita a perda de mensagens e permite a inspeção manual de registros com falha.
-
Falhas parciais de lotes: para o Amazon SQS e o Kinesis, use relatórios de falhas parciais de lotes para processar registros individualmente e somente repetir os registros com falha.
-
bissecção em erros: para o Kinesis e DynamoDB Streams, habilite a bissecção em caso de erro para dividir lotes com falha e isolar registros problemáticos.
nota
As funções duráveis oferecem suporte a filas de mensagens não entregues (DLQs) para tratamento de erros, mas não oferecem suporte a destinos do Lambda. Configure uma DLQ para capturar registros de invocações com falhas.
Para obter informações completas sobre o tratamento de erros de mapeamento da origem do evento, consulte mapeamentos da origem do evento.
Uso de uma função intermediária para fluxos de trabalho de longa duração
Se seu fluxo de trabalho exigir mais de 15 minutos para ser concluído, use uma função do Lambda padrão intermediária entre o mapeamento da origem do evento e a sua função durável. A função intermediária receberá eventos do mapeamento da origem do evento e invocará a função durável de forma assíncrona, removendo o limite de execução de 15 minutos.
Esse padrão separa o modelo de invocação síncrona do mapeamento da origem do evento do modelo de execução de longa duração da função durável. O mapeamento da origem do evento invoca a função intermediária, que retornará rapidamente após iniciar a execução durável. A função durável então funcionará de forma independente pelo tempo necessário (até 1 ano).
Arquitetura
O padrão da função intermediária usa três componentes:
-
Mapeamento da origem do evento: sonda a origem do evento (Amazon SQS, Kinesis, DynamoDB Streams) e invoca a função intermediária de forma síncrona com lotes de registros.
-
Função intermediária: uma função do Lambda padrão que recebe eventos do mapeamento da origem do evento, valida e transforma os dados, se necessário, e invoca a função durável de forma assíncrona. Essa função é concluída rapidamente (normalmente em menos de 1 segundo) e retorna o controle para o mapeamento da origem do evento.
-
Função durável: processa o evento com uma lógica complexa de várias etapas que pode ser executada por longos períodos. É invocada de forma assíncrona, portanto, não é limitada pelo limite de 15 minutos.
Implementação
A função intermediária receberá o evento inteiro do mapeamento da origem do evento e invocará a função durável de forma assíncrona. Use o parâmetro do nome da execução para garantir que a execução com idempotência seja iniciada, evitando o processamento duplicado se o mapeamento da origem do evento tentar novamente:
Para obter idempotência na própria função intermediária, use o Powertools para AWS Lambda para evitar invocações duplicadas da função durável se o mapeamento da origem do evento tentar novamente a função intermediária.
A função durável receberá a carga com o nome da execução e processará todos os registros com uma lógica de longa duração:
Considerações importantes
Esse padrão remove o limite de execução de 15 minutos ao desacoplar o mapeamento da origem do evento da execução durável. A função intermediária retornará imediatamente após iniciar a execução durável, permitindo que o mapeamento da origem do evento continue sendo processado. A função durável então funcionará de forma independente pelo tempo necessário.
A função intermediária terá êxito quando invocar a função durável, não quando a execução durável for concluída. Se a execução durável falhar posteriormente, o mapeamento da origem do evento não será repetido porque ele já processou o lote com êxito. Implemente o tratamento de erros na função durável e configure filas de mensagens não entregues para execuções com falha.
Use o parâmetro do nome da execução para garantir o início da execução com idempotência. Se o mapeamento da origem do evento tentar novamente a função intermediária, a função durável não iniciará uma execução duplicada porque o nome da execução já existe.
Origens de eventos com suporte
As funções duráveis oferecem suporte a todas as origens de eventos do Lambda que usem mapeamentos da origem do evento:
Filas do Amazon SQS (padrão e FIFO)
Streams do Kinesis
DynamoDB Streams
Amazon Managed Streaming for Apache Kafka (Amazon MSK)
Apache Kafka autogerenciado
Amazon MQ (ActiveMQ e RabbitMQ)
Fluxos de mudança do Amazon DocumentDB
Todos os tipos de origens de eventos estão sujeitos ao limite de execução durável de 15 minutos ao invocar funções duráveis.