Neste tutorial, você cria uma função do Lambda para consumir eventos do Amazon DynamoDB Streams.
Pré-requisitos
Se você ainda não instalou a AWS Command Line Interface, siga as etapas em Instalar ou atualizar a versão mais recente da AWS CLI para instalá-la.
O tutorial requer um terminal de linha de comando ou um shell para executar os comandos. No Linux e no macOS, use o gerenciador de pacotes e de shell de sua preferência.
nota
No Windows, alguns comandos da CLI do Bash que você costuma usar com o Lambda (como zip
) não são compatíveis com os terminais integrados do sistema operacional. Para obter uma versão do Ubuntu com o Bash integrada no Windows, instale o Subsistema do Windows para Linux
Criar a função de execução
Crie a função de execução que dá à sua função permissão para acessar recursos do AWS.
Para criar uma função de execução
-
Abra a página Roles
(Funções) no console do IAM. -
Selecione Criar perfil.
-
Crie uma função com as propriedades a seguir.
-
Entidade confiável: Lambda.
-
Permissions (Permissões): AWSLambdaDynamoDBExecutionRole.
-
Role name (Nome da função):
lambda-dynamodb-role
.
-
O AWSLambdaDynamoDBExecutionRole tem as permissões necessárias para a função ler itens do DynamoDB e gravar logs no CloudWatch Logs.
Criar a função
Crie uma função do Lambda que processe seus eventos do DynamoDB. O código da função grava alguns dos dados de eventos de entrada no CloudWatch Logs.
- SDK para .NET
-
nota
Há mais no GitHub. Encontre o exemplo completo e saiba como configurar e executar no repositório dos Exemplos sem servidor
. Como consumir um evento do DynamoDB com o Lambda usando .NET.
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System.Text.Json; using System.Text; using Amazon.Lambda.Core; using Amazon.Lambda.DynamoDBEvents; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace AWSLambda_DDB; public class Function { public void FunctionHandler(DynamoDBEvent dynamoEvent, ILambdaContext context) { context.Logger.LogInformation($"Beginning to process {dynamoEvent.Records.Count} records..."); foreach (var record in dynamoEvent.Records) { context.Logger.LogInformation($"Event ID: {record.EventID}"); context.Logger.LogInformation($"Event Name: {record.EventName}"); context.Logger.LogInformation(JsonSerializer.Serialize(record)); } context.Logger.LogInformation("Stream processing complete."); } }
Para criar a função
-
Copie o código de amostra em um arquivo chamado
example.js
. -
Crie um pacote de implantação.
zip function.zip example.js
-
Crie uma função do Lambda com o comando
create-function
.aws lambda create-function --function-name ProcessDynamoDBRecords \ --zip-file fileb://function.zip --handler example.handler --runtime nodejs18.x \ --role arn:aws:iam::
111122223333
:role/lambda-dynamodb-role
Testar a função do Lambda
Nesta etapa, você invoca sua função do Lambda manualmente usando o comando invoke
da CLI do AWS Lambda e o seguinte exemplo de evento do DynamoDB. Copie o seguinte para um arquivo chamado input.txt
.
exemplo input.txt
{
"Records":[
{
"eventID":"1",
"eventName":"INSERT",
"eventVersion":"1.0",
"eventSource":"aws:dynamodb",
"awsRegion":"us-east-1",
"dynamodb":{
"Keys":{
"Id":{
"N":"101"
}
},
"NewImage":{
"Message":{
"S":"New item!"
},
"Id":{
"N":"101"
}
},
"SequenceNumber":"111",
"SizeBytes":26,
"StreamViewType":"NEW_AND_OLD_IMAGES"
},
"eventSourceARN":"stream-ARN"
},
{
"eventID":"2",
"eventName":"MODIFY",
"eventVersion":"1.0",
"eventSource":"aws:dynamodb",
"awsRegion":"us-east-1",
"dynamodb":{
"Keys":{
"Id":{
"N":"101"
}
},
"NewImage":{
"Message":{
"S":"This item has changed"
},
"Id":{
"N":"101"
}
},
"OldImage":{
"Message":{
"S":"New item!"
},
"Id":{
"N":"101"
}
},
"SequenceNumber":"222",
"SizeBytes":59,
"StreamViewType":"NEW_AND_OLD_IMAGES"
},
"eventSourceARN":"stream-ARN"
},
{
"eventID":"3",
"eventName":"REMOVE",
"eventVersion":"1.0",
"eventSource":"aws:dynamodb",
"awsRegion":"us-east-1",
"dynamodb":{
"Keys":{
"Id":{
"N":"101"
}
},
"OldImage":{
"Message":{
"S":"This item has changed"
},
"Id":{
"N":"101"
}
},
"SequenceNumber":"333",
"SizeBytes":38,
"StreamViewType":"NEW_AND_OLD_IMAGES"
},
"eventSourceARN":"stream-ARN"
}
]
}
Execute o seguinte comando invoke
.
aws lambda invoke --function-name ProcessDynamoDBRecords \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt
A opção cli-binary-format será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute aws configure set cli-binary-format raw-in-base64-out
. Para obter mais informações, consulte A AWS CLI comporta opções de linha de comando globais no Guia do usuário da AWS Command Line Interface versão 2.
A função retorna a string message
no corpo da resposta.
Verifique a saída no arquivo outputfile.txt
.
Criar uma tabela do DynamoDB com uma transmissão habilitada
Criar uma tabela do Amazon DynamoDB com uma transmissão habilitada.
Como criar uma tabela do DynamoDB
-
Abra o console do DynamoDB
. -
Escolha Create table.
-
Crie uma tabela com as configurações a seguir.
-
Table name (Nome da tabela):
lambda-dynamodb-stream
-
Primary key (Chave primária):
id
(string)
-
-
Escolha Criar.
Como habilitar fluxos
-
Abra o console do DynamoDB
. -
Escolha Tables (Tabelas).
-
Escolha a tabela lambda-dynamodb-stream.
-
Em Exports and streams (Exportações e transmissões), escolha DynamoDB stream details (Detalhes da tranmissão do DynamoDB).
-
Selecione Ativar.
-
Em Tipo de exibição, escolha Somente atributos principais.
-
Escolha Ativar fluxo.
Anote o ARN do fluxo. Você precisará dele na próxima etapa quando for associar a transmissão à função do Lambda. Para obter mais informações sobre como habilitar fluxos, consulte Capturing table activity with DynamoDB Streams (Capturar atividades de tabelas com o DynamoDB Streams).
Adicionar uma fonte de eventos no AWS Lambda
Crie um mapeamento da fonte do evento no AWS Lambda. Este mapeamento de fontes de eventos associa a transmissão do DynamoDB à função do Lambda. Depois de criar esse mapeamento da fonte do evento, o AWS Lambda começa a sondar o fluxo.
Execute o comando AWS CLI a seguir da create-event-source-mapping
. Depois que o comando for executado, anote o UUID. Você precisará deste UUID para se referir ao mapeamento da fonte do evento em todos os comandos, por exemplo, ao excluir o mapeamento da fonte do evento.
aws lambda create-event-source-mapping --function-name ProcessDynamoDBRecords \ --batch-size 100 --starting-position LATEST --event-source
DynamoDB-stream-arn
Isso cria um mapeamento entre a transmissão do DynamoDB especificado e a função do Lambda. Você pode associar uma transmissão do DynamoDB a várias funções do Lambda e associar a mesma função do Lambda a várias transmissões. No entanto, as funções do Lambda compartilharão o throughput de leitura para os fluxos dos quais compartilham.
Você pode obter a lista de mapeamentos de fontes de eventos executando o comando a seguir.
aws lambda list-event-source-mappings
Esta lista retorna todos os mapeamentos de fontes de eventos que você criou, e para cada mapeamento mostra o LastProcessingResult
, entre outras coisas. Este campo será usado para fornecer uma mensagem informativa, se houver problemas. Valores como No records processed
(indica que o AWS Lambda não iniciou a sondagem ou de que não há registros no fluxo) e OK
(indica que o AWS Lambda foi bem-sucedido na leitura dos registros do fluxo e invocou a função do Lambda) indicam que não há problemas. Se houver problemas, você receberá uma mensagem de erro.
Se você tiver muitos mapeamentos da fonte do evento, use o parâmetro de nome da função para refinar os resultados.
aws lambda list-event-source-mappings --function-name ProcessDynamoDBRecords
Testar a configuração
Teste a experiência completa. À medida que você executa atualizações nas tabelas, o DynamoDB grava registros de eventos na transmissão. Quando o AWS Lambda sonda o stream, ele detecta novos registros no stream e executa a função do Lambda em seu nome, passando os eventos para a função.
-
No console do DynamoDB, adicione, atualize ou exclua itens da tabela. O DynamoDB grava registros dessas ações na transmissão.
-
O AWS Lambda sonda a transmissão e, ao detectar atualizações nela, invoca a função do Lambda passando os dados do evento que ele encontrar na transmissão.
-
A função é executada e cria logs no Amazon CloudWatch. Você pode verificar os logs relatados no console do Amazon CloudWatch.
Limpe os recursos
Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.
Como excluir a função do Lambda
-
Abra a página Functions
(Funções) no console do Lambda. -
Selecione a função que você criou.
-
Selecione Ações, Excluir.
-
Digite
confirm
no campo de entrada de texto e escolha Delete (Excluir).
Para excluir a função de execução
-
Abra a página Roles
(Funções) no console do IAM. -
Selecione a função de execução que você criou.
-
Escolha Excluir.
-
Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).
Para excluir uma tabela do DynamoDB
-
Abra a página Tables
(Tabelas) no console do DynamoDB. -
Selecione a tabela que você criou.
-
Escolha Excluir.
-
Digite
delete
na caixa de texto. -
Selecione Delete table (Excluir tabela).