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 envia lotes para sua função somente quando o tamanho do lote é atingido ou o limite de tamanho da carga útil é atingido. 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.

Uma janela de lotes expira quando um destes três critérios é atendido: a janela de lotes atinge o valor máximo, o tamanho do lote é atendido ou o tamanho da carga útil atinge 6 MB.

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: