Como o Lambda processa registros de origens de eventos baseadas em fluxos e filas - AWS Lambda

Como o Lambda processa registros de origens de eventos baseadas em fluxos e filas

Um mapeamento de origem de evento é um recurso no Lambda que lê itens de serviços baseados em fluxo ou fila e invoca uma função com lotes de registros. Os serviços a seguir usam mapeamentos de origem de eventos para invocar funções do Lambda:

Atenção

Os mapeamentos da origem do evento do Lambda processam cada evento ao menos uma vez, podendo haver o processamento duplicado de registros. Para evitar possíveis problemas relacionados a eventos duplicados, é altamente recomendável tornar o código da função idempotente. Para saber mais, consulte Como tornar minha função do Lambda idempotente no Centro de Conhecimentos da AWS.

Como os mapeamentos de origem de eventos diferem dos acionadores diretos

Alguns serviços da AWS podem invocar diretamente as funções do Lambda usando acionadores. Esses serviços enviam eventos para o Lambda, e a função é invocada imediatamente quando o evento especificado ocorre. Os acionadores são adequados para eventos discretos e processamento em tempo real. Quando você cria um acionador usando o console do Lambda, o console interage com o serviço da AWS correspondente para configurar a notificação de eventos nesse serviço. Na verdade, o acionador é armazenado e gerenciado pelo serviço que gera os eventos, não pelo Lambda. Aqui estão alguns exemplos de serviços que usam acionadores para invocar funções do Lambda:

Os mapeamentos de origem de eventos são recursos do Lambda criados e gerenciados dentro do serviço do Lambda. Os mapeamentos de origem de eventos são projetados para processar dados de streaming de alto volume ou mensagens de filas. O processamento de registros de um fluxo ou fila em lotes é mais eficiente do que processar registros individualmente.

Comportamento de lotes

Por padrão, um mapeamento de fonte de evento registra em lotes em uma única carga útil que o Lambda envia para sua função. Para ajustar o comportamento de lotes, configure uma janela de lotes (MaximumBatchingWindowInSeconds) e um tamanho de lote (BatchSize). A janela de lote é o tempo máximo para reunir registros em uma única carga útil. O tamanho de lote é o número máximo de registros em um único lote. O Lambda invoca a função quando um destes três critérios é atendido:

  • A janela de lotes atinge o valor máximo. O comportamento padrão da janela de lote varia conforme a fonte de evento específica.

    • Para fontes de eventos do Kinesis, do DynamoDB e do Amazon SQS: a janela de lote padrão é 0 segundo. Isso significa que o Lambda invoca a função assim que os registros estão disponíveis. Para definir uma janela de lotes, configure MaximumBatchingWindowInSeconds. É possível configurar esse parâmetro para qualquer valor de 0 a 300 segundos em incrementos de 1 segundo. Se você configurar uma janela de lote, a próxima janela começará assim que a invocação de função anterior for concluída.

    • Para origens do evento do Amazon MSK, Apache Kafka autogerenciado, Amazon MQ e Amazon DocumentDB: a janela em lotes padrão é de 500 ms. É possível configurar MaximumBatchingWindowInSeconds para qualquer valor de 0 a 300 segundos em incrementos de segundos. A janela de lotes começa assim que o primeiro registro chega.

      nota

      Como só é possível alterar MaximumBatchingWindowInSeconds em incrementos de segundos, você não pode reverter para a janela de lotes padrão de 500 ms após alterá-la. Para restaurar a janela de lotes padrão, é necessário criar um novo mapeamento de fonte de evento.

  • O tamanho do lote é atendido. O tamanho mínimo do lote é 1. O tamanho do lote padrão e máximo dependem da fonte de eventos. Para obter detalhes sobre esses valores, consulte a especificação de BatchSize para a operação da API CreateEventSourceMapping.

  • O tamanho da carga útil atinge 6 MB. Não é possível modificar esse limite.

O diagrama a seguir ilustra essas três condições. Suponha que uma janela de lotes comece em t = 7 segundos. No primeiro caso, a janela de lotes atinge seu máximo de 40 segundos em t = 47 segundos após acumular cinco registros. No segundo caso, como o tamanho do lote chega a dez antes que a janela de lotes expire, a janela de lotes é encerrada mais cedo. No terceiro caso, como o tamanho máximo da carga útil é atingido antes que a janela de lotes expire, a janela de lotes é encerrada mais cedo.

A janela de lotes expira quando o tempo máximo é atingido, o tamanho do lote é atingido ou a carga útil chega a 6 MB

Recomendamos testar com diferentes tamanhos de lote e de registro para que a frequência de sondagem de cada origem de eventos seja ajustada à rapidez com que a função pode concluir sua tarefa. O parâmetro BatchSize CreateEventSourceMapping controla o número máximo de registros que podem ser enviados para sua função a cada invocação. Um tamanho de lote maior geralmente absorve de maneira mais eficiente a sobrecarga da invocação em um conjunto maior de registros aumentando o throughput.

O Lambda não espera a conclusão de nenhuma extensãoconfigurada para enviar o próximo lote para processamento. Em outras palavras, suas extensões podem continuar sendo executadas enquanto o Lambda processa o próximo lote de registros. Isso pode causar problemas de controle de utilização se você violar quaisquer configurações ou limites de simultaneidade de sua conta. Para detectar se esse é um problema em potencial, monitore suas funções e verifique se você está vendo métricas de simultaneidade mais altas do que o esperado para o seu mapeamento da origem do evento. Devido ao curto intervalo entre as invocações, o Lambda pode relatar brevemente um uso de simultaneidade maior do que o número de fragmentos. Isso pode ser verdadeiro até mesmo para funções do Lambda sem extensões.

Por padrão, se a função retornar um erro, o mapeamento da origem do evento será reprocessado até que a função seja bem-sucedida ou que os itens no lote expirem. Para garantir o processamento na ordem, o mapeamento da fonte de eventos pausa o processamento do fragmento afetado até o erro ser resolvido. Em origens de fluxo (DynamoDB e Kinesis), é possível configurar o número máximo de vezes que o Lambda tentará novamente quando sua função retornar um erro. Erros de serviço ou controles de utilização nos quais o lote não atinge a função não contam para as tentativas de repetição. Você também pode configurar o mapeamento da origem do evento para enviar um registro de invocação a um destino quando descartar um lote de eventos.

API do mapeamento da fonte de eventos

Para gerenciar uma fonte de eventos com a AWS Command Line Interface (AWS CLI) ou um AWS SDK, use as seguintes operações de API: