Mapeamentos da fonte de eventos do AWS Lambda - AWS Lambda

Mapeamentos da fonte de eventos do AWS Lambda

Um mapeamento da origem do evento é um recurso do AWS Lambda que lê a partir de uma origem de evento e invoca uma função do Lambda. Você pode usar os mapeamentos de origem do evento para processar itens de um stream ou fila em serviços que não invocam funções do Lambda diretamente. O Lambda fornece os mapeamentos de origem do evento para os serviços a seguir.

Um mapeamento da origem do evento usa permissões na função de execução para ler e gerenciar itens na origem do evento. Permissões, estrutura do evento, configurações e comportamento de sondagem variam de acordo com a origem do evento. Para obter mais informações, consulte o tópico vinculado para o serviço que você usa como origem de evento.

Para gerenciar mapeamentos de origens de eventos com a AWS CLI ou o AWS SDK, use as seguintes operações de API:

O exemplo a seguir usa a AWS CLI para mapear uma função denominada my-function para um fluxo do DynamoDB especificado pelo respectivo nome de recurso da Amazon (ARN), com um tamanho de lote de 500.

$ aws lambda create-event-source-mapping --function-name my-function --batch-size 500 --starting-position LATEST \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525 { "UUID": "14e0db71-5d35-4eb5-b481-8945cf9d10c2", "BatchSize": 500, "MaximumBatchingWindowInSeconds": 0, "ParallelizationFactor": 1, "EventSourceArn": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "LastModified": 1560209851.963, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "User action", "DestinationConfig": {}, "MaximumRecordAgeInSeconds": 604800, "BisectBatchOnFunctionError": false, "MaximumRetryAttempts": 10000 }

Mapeamentos de origem de evento leem itens de um fluxo ou fila em lotes. Eles incluem vários itens no evento recebido por sua função. Você pode configurar o tamanho do lote que o mapeamento da origem do evento envia para a sua função, até um valor máximo que varia de acordo com o serviço. O número de itens no evento poderá ser menor que o tamanho do lote se não houver itens suficientes disponíveis, ou se o lote for muito grande para enviar em um evento e deve ser dividido.

O exemplo a seguir mostra um mapeamento de origem de evento que lê de um fluxo do Kinesis. Se houver falha em todas as tentativas de processamento de um lote de eventos, o mapeamento de origem do evento enviará detalhes sobre o lote para uma fila do SQS.


      O mapeamento de uma origem de evento lê de um fluxo do Kinesis e coloca os registros em fila localmente antes de enviá-los para a função.

O lote de eventos é o evento que o Lambda envia para a função. Ele é um lote de registros ou mensagens compiladas dos itens que o mapeamento de origem de evento lê de um fluxo ou de uma fila. O tamanho do lote e outras configurações se aplicam somente ao lote de eventos.

Para streams, um mapeamento da origem do evento cria um iterador para cada fragmento no stream e processa itens em cada fragmento na ordem. Você pode configurar o mapeamento da origem do evento para ler apenas novos itens que aparecem no stream ou para iniciar com os itens mais antigos. Os itens processados não são removidos do fluxo e podem ser processados por outras funções ou consumidores.

Por padrão, se a função retornar um erro, o lote inteiro será reprocessado até que a função seja bem-sucedida ou os itens no lote expirem. Para garantir o processamento na ordem, o processamento do fragmento afetado é pausado até o erro ser resolvido. É possível configurar o mapeamento de origem do evento para descartar eventos antigos, restringir o número de tentativas ou processar vários lotes em paralelo. Se você processar vários lotes em paralelo, o processamento em ordem ainda será garantido para cada chave de partição, mas várias chaves de partição no mesmo estilhaço serão processadas simultaneamente.

Também é possível configurar o mapeamento de origem do evento para enviar um registro de invocação para outro serviço quando descartar um lote de eventos. O Lambda oferece suporte aos destinos a seguir para mapeamentos de origem de evento.

  • Amazon SQS – uma fila do SQS.

  • Amazon SNS – um tópico do SNS.

O registro de invocação contém detalhes sobre o lote de eventos com falha no formato JSON.

O exemplo a seguir mostra um registro de invocação de um stream do Kinesis.

exemplo Registro de invocação

{ "requestContext": { "requestId": "c9b8fa9f-5a7f-xmpl-af9c-0c604cde93a5", "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myfunction", "condition": "RetryAttemptsExhausted", "approximateInvokeCount": 1 }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "version": "1.0", "timestamp": "2019-11-14T00:38:06.021Z", "KinesisBatchInfo": { "shardId": "shardId-000000000001", "startSequenceNumber": "49601189658422359378836298521827638475320189012309704722", "endSequenceNumber": "49601189658422359378836298522902373528957594348623495186", "approximateArrivalOfFirstRecord": "2019-11-14T00:38:04.835Z", "approximateArrivalOfLastRecord": "2019-11-14T00:38:05.580Z", "batchSize": 500, "streamArn": "arn:aws:kinesis:us-east-2:123456789012:stream/mystream" } }

O Lambda também oferece suporte ao processamento em ordem para filas FIFO (primeiro a entrar, primeiro a sair), escalando até o número de grupos de mensagens ativos. Para as filas padrão, os itens não são necessariamente processados em ordem. O Lambda escala para processar uma fila padrão o mais rápido possível. Quando ocorre uma falha, os lotes são retornados para a fila como itens individuais e talvez sejam processados em um agrupamento diferente do que o lote original. Ocasionalmente, o mapeamento da origem do evento pode receber o mesmo item da fila duas vezes, mesmo que não tenha ocorrido nenhum erro de função. O Lambda exclui itens da fila depois que eles são processados com êxito. É possível configurar a fila de origem para enviar itens para uma fila de mensagens mortas se eles não puderem ser processados.

Para obter informações sobre serviços que invocam funções do Lambda diretamente, consulte Usar o AWS Lambda com outros serviços.