Usando a função Lambda com Amazon DynamoDB
O DynamoDB pode acionar o AWS Lambda quando os dados são adicionados às tabelas, atualizados ou excluídos. Neste capítulo, trabalharemos em um exemplo simples que adicionará itens à tabela DynamoDB e AWS Lambda que lerá os dados e enviará e-mails com os dados adicionados.
Requisitos
Para usar o Amazon DB e AWS Lambda, precisamos seguir as etapas conforme mostrado abaixo -
Crie uma tabela no DynamoDB com chave primária
Crie uma função que terá permissão para trabalhar com DynamoDB e AWS Lambda.
Criar função no AWS Lambda
AWS Lambda Trigger para enviar e-mail
Adicionar dados no DynamoDB
Vamos discutir cada uma dessas etapas em detalhes.
Exemplo
Vamos trabalhar no exemplo a seguir, que mostra a interação básica entre o DynamoDB e o AWS Lambda. Este exemplo irá ajudá-lo a entender as seguintes operações -
Criando uma tabela chamada cliente na tabela Dynamodb e como inserir dados nessa tabela.
Acionar a função AWS Lambda assim que os dados forem inseridos e enviar e-mail usando o serviço Amazon SES.
O diagrama de blocos básico que explica o fluxo do exemplo é mostrado abaixo -
Criar tabela no DynamoDB com chave primária
Faça login no console da AWS. Vá para AWS Services e selecione DynamoDB conforme mostrado abaixo. Selecione DynamoDB.
O DynamoDB mostra as opções conforme mostrado abaixo -
Agora clique Create tablepara criar a tabela conforme mostrado. Nós nomeamos a mesa comocustomer com chave primária para essa tabela como cust_id. Clique emCreate botão para adicionar a tabela ao dynamodb.
A tabela criada é como mostrado abaixo -
Podemos adicionar itens à tabela criada da seguinte maneira -
Clique Items e clique Create item botão como mostrado -
Criação de função com permissões para trabalhar com DynamoDB e AWS Lambda
Para criar uma função, vá para serviços da AWS e clique em IAM.
Vamos criar uma política a ser usada apenas para a tabela DynamoDB criada anteriormente -
Agora, escolha um Service. Observe que o serviço que selecionamos éDynamoDB. ParaActions nós pegamos tudo Dynamodbações, ou seja, acesso à lista, leitura e gravação. Pararesources, selecionaremos as ações do tipo de recurso da tabela. Ao clicar nele, você verá a seguinte tela -
Agora, selecione table e Add ARNa ele como mostrado. Nós conseguiremosARN detalhes de customer table criado conforme mostrado abaixo -
Entrar arn detalhes aqui -
Clique Addbotão para salvar as alterações. Uma vez feitoClick on Review policy. Insira o nome da política, descrição etc. conforme mostrado abaixo -
Clique em create policypara salvá-lo. Adicione a política à função a ser criada. SelecioneRole do lado esquerdo e insira os detalhes.
Observe que as políticas adicionadas são newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess e amazonsesfullaccess. Adicione a função e a usará ao criar a função AWS Lambda.
Criar função no AWS Lambda
Assim, criamos a função Lambda chamada newlambdafordynamodb como mostrado.
Agora, vamos adicionar o gatilho DynamodDB ao AWS Lambda criado. O tempo de execução que usaremos é o Node.js.
Você pode encontrar os seguintes detalhes no acionador Dynamodb que deve ser configurado para AWS Lambda -
Agora, basta clicar Add para adicionar o gatilho ao AWS Lambda.
AWS Lambda Trigger para enviar e-mail
O AWS Lambda será acionado quando os dados forem inseridos no AWS Lambda. O parâmetro do evento terá os dados do dynamodb inseridos. Isso irá ler os dados do evento e enviar e-mail.
Enviando um email
Para enviar e-mail, você precisa seguir as etapas abaixo -
Passo 1
Vá para o serviço AWS e selecione SES (serviço de email simples). Valide o e-mail para o qual precisamos enviar um e-mail conforme mostrado -
Passo 2
Clique no botão Verify a New Email Address para adicionar o endereço de e-mail.
etapa 3
Digite um endereço de e-mail para verificá-lo. O endereço de e-mail receberá um e-mail de ativação da Amazon, que precisa ser clicado. Assim que a ativação é feita, a id do email é verificada e pode ser usada com os serviços da AWS.
Passo 4
O código AWS Lambda que lê os dados do evento e envia e-mail é fornecido abaixo -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
}
Agora, salve a função e os dados do Lambda na tabela do DynamoDB.
Adicionar dados no DynamoDB
Use a seguinte sequência para adicionar dados no DynamoDB.
Passo 1
Vai para a mesa customer criado em Dynamodb.
Passo 2
Clique Create item.
etapa 3
Clique Save e verifique o id de email fornecido no AWS Lambda para ver se o email foi enviado pelo AWS Lambda.