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.