AWS Lambda
Guia do desenvolvedor

Uso do AWS Lambda com o Amazon DynamoDB

Você pode usar uma função do AWS Lambda para processar registros em um streaming do Amazon DynamoDB Streams. Com o DynamoDB Streams, você pode acionar uma função do Lambda para executar o trabalho adicional cada vez que uma tabela do DynamoDB é atualizada.

O Lambda lê registros do fluxo e invoca sua função de forma síncrona com um evento que contém registros de fluxo. O Lambda lê registros em lotes e invoca sua função para processar registros do lote.

exemplo Evento do registro do DynamoDB Streams

{ "Records": [ { "eventID": "1", "eventVersion": "1.0", "dynamodb": { "Keys": { "Id": { "N": "101" } }, "NewImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES", "SequenceNumber": "111", "SizeBytes": 26 }, "awsRegion": "us-west-2", "eventName": "INSERT", "eventSourceARN": eventsourcearn, "eventSource": "aws:dynamodb" }, { "eventID": "2", "eventVersion": "1.0", "dynamodb": { "OldImage": { "Message": { "S": "New item!" }, "Id": { "N": "101" } }, "SequenceNumber": "222", "Keys": { "Id": { "N": "101" } }, "SizeBytes": 59, "NewImage": { "Message": { "S": "This item has changed" }, "Id": { "N": "101" } }, "StreamViewType": "NEW_AND_OLD_IMAGES" }, "awsRegion": "us-west-2", "eventName": "MODIFY", "eventSourceARN": sourcearn, "eventSource": "aws:dynamodb" }

O Lambda sonda os estilhaços em seu fluxo do DynamoDB Streams para registros a uma taxa básica de 4 vezes por segundo. Quando os registros estão disponíveis, o Lambda invoca a função e aguarda o resultado. Se o processamento for bem-sucedido, o Lambda continua a sondagem até que ela receba mais registros.

Por padrão, o Lambda invoca sua função assim que os registros estão disponíveis no fluxo. Se o lote que ele ler do fluxo tiver somente um registro, o Lambda enviará apenas um registro à função. Para evitar invocar a função com um número pequeno de registros, você pode dizer à origem dos eventos para fazer o buffer dos registros por até cinco minutos, configurando uma janela de lote. Antes de invocar a função, o Lambda continua lendo os registros do fluxo até reunir um lote completo ou até a janela do lote expirar.

Se a sua função retornar um erro, o Lambda tentará executar novamente o lote até que o processamento seja bem-sucedido ou os dados expirem. Até que o problema seja resolvido, nenhum dado no estilhaço será processado. Gerencie qualquer erros de processamento de registro no código para evitar estilhaços paralisados e possíveis perdas de dados.

Permissões da função de execução

O Lambda precisa das permissões a seguir para gerenciar recursos relacionados ao seu fluxo do DynamoDB Streams. Adicione-as à função de execução da sua função.

A política gerenciada AWSLambdaDynamoDBExecutionRole inclui essas permissões. Para obter mais informações, consulte Função de execução do AWS Lambda.

Configuração de um stream como fonte de eventos

Crie um mapeamento de fonte do evento para orientar o Lambda a enviar registros de seu fluxo para uma função do Lambda. Você pode criar vários mapeamentos de fonte do evento para processar os mesmos dados com várias funções do Lambda ou processar itens de vários fluxos com uma única função.

Para configurar sua função para leitura no DynamoDB Streams no console do Lambda, crie um gatilho DynamoDB.

Para criar um gatilho

  1. Abra a página Functions (Funções) do console do Lambda.

  2. Escolha uma função.

  3. Em Designer, escolha Add trigger (Adicionar gatilho).

  4. Escolha um tipo de gatinho.

  5. Configure as opções necessárias e, em seguida, escolha Add (Adicionar).

O Lambda oferece suporte às seguintes opções das fontes de evento do DynamoDB.

Opções de fonte do evento

  • Tabela DynamoDB – A tabela DynamoDB da qual os registros serão lidos.

  • Batch size (Tamanho do lote) – O número de registros para ler a partir de um estilhaço em cada lote, até 1.000. O Lambda passa todos os registros no lote para a função em uma única chamada, desde que o tamanho total dos eventos não exceda o limite de carga para a invocação síncrona (6 MB).

  • Batch window (Janela de lote) – especifique o máximo de tempo para reunir registros antes de invocar a função, em segundos.

  • Starting position (Posição inicial) – Processe apenas registros novos ou todos os registros existentes.

    • Latest (Mais recente) – Processe novos registros adicionados ao fluxo.

    • Trim horizon (Redução horizontal) – Processe todos os registros no fluxo.

    Depois de processar todos os registros existentes, a função é capturada e continua a processar novos registros.

  • Enabled (Habilitado) – Desative a fonte de eventos para interromper o processamento de registros. O Lambda monitora o último registro processado e retoma o processamento a partir desse ponto quando o mapeamento é habilitado novamente.

Para gerenciar a configuração da fonte do evento posteriormente, escolha o gatilho no designer.

APIs do mapeamento da fonte de eventos

Para gerenciar os mapeamentos de origem de eventos com a AWS CLI ou o AWS SDK, use as seguintes APIs.

O exemplo a seguir usa a AWS Command Line Interface para mapear uma função chamada my-function para um fluxo do DynamoDB Streams especificado pelo 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, "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" }

Métricas do Amazon CloudWatch

O Lambda emite a métrica IteratorAge quando a sua função termina de processar um lote de registros. A métrica indica a idade do último registro no lote quando o processamento foi concluído. Se sua função estiver processando novos eventos, você poderá usar a idade do iterador para estimar a latência entre quando um registro é adicionado e quando a função o processa.

Uma tendência crescente na idade do iterador pode indicar problemas com sua função. Para mais informações, consulte Monitoramento e solução de problemas de aplicativos baseados no Lambda.