使用 Lambda 函数与 Amazon DynamoDB



当数据添加到表中、更新或删除时,DynamoDB 可以触发 AWS Lambda。在本章中,我们将研究一个简单的示例,该示例将项目添加到 DynamoDB 表中,以及一个将读取数据并发送包含添加数据的邮件的 AWS Lambda 函数。

先决条件

要使用 Amazon DB 和 AWS Lambda,我们需要按照以下步骤操作:

  • 在 DynamoDB 中创建一个带主键的表

  • 创建一个具有使用 DynamoDB 和 AWS Lambda 权限的角色。

  • 在 AWS Lambda 中创建函数

  • AWS Lambda 触发器发送邮件

  • 在 DynamoDB 中添加数据

让我们详细讨论每个步骤。

示例

我们将对以下示例进行操作,该示例显示了 DynamoDB 和 AWS Lambda 之间的基本交互。此示例将帮助您了解以下操作:

  • 在 Dynamodb 表中创建名为 customer 的表以及如何在该表中输入数据。

  • 在输入数据后触发 AWS Lambda 函数,并使用 Amazon SES 服务发送邮件。

解释示例流程的基本框图如下所示:

Block Diagram

在 DynamoDB 中创建带主键的表

登录到 AWS 控制台。转到 AWS 服务并选择 DynamoDB,如下所示。选择 DynamoDB。

Dynamodb

DynamoDB 显示如下所示的选项:

Dynamodb Option

现在,单击创建表以创建表,如所示。我们将表命名为customer,该表的primaryKey 为cust_id。单击创建按钮将表添加到 dynamodb。

Create Dynamodb

创建的表如下所示:

Table Details

我们可以如下所示向创建的表中添加项目:

Recent Alerts

单击项目,然后单击创建项目按钮,如所示:

Create Item

Create Item2

创建具有 DynamoDB 和 AWS Lambda 权限的角色

要创建角色,请转到 AWS 服务并单击 IAM。

Creating Role

让我们创建一个仅用于之前创建的 DynamoDB 表的策略:

Create Policy Dynamo

现在,选择一个服务。注意,我们选择的服务是DynamoDB。对于操作,我们采用了所有Dynamodb操作,即访问列表、读取和写入。对于资源,我们将选择表资源类型操作。当您单击它时,您会看到如下所示的屏幕:

Dynamodb Action

现在,选择并向其添加 ARN,如所示。我们将从创建的customer 表中获取ARN详细信息,如下所示:

Table Created

在此处输入arn详细信息:

Specify Arn

单击添加按钮保存更改。完成后,单击查看策略。输入策略名称、描述等,如下所示:

Add Button

单击创建策略以保存它。将策略添加到要创建的角色中。从左侧选择角色并输入详细信息。

Create Role

注意,添加的策略为newpolicyfordynamdb、awslambdafullaccess、cloudwatchfullaccessamazonsesfullaccess。添加角色,并在创建 AWS Lambda 函数时使用它。

在 AWS Lambda 中创建函数

因此,我们创建了一个名为newlambdafordynamodb的 Lambda 函数,如所示。

New Lambda

现在,让我们将 DynamodDB 触发器添加到创建的 AWS Lambda 中。我们将使用的运行时是 Node.js。

Designer Trigger

您可以在 Dynamodb 触发器中找到以下需要为 AWS Lambda 配置的详细信息:

Dynamo Trigger

现在,只需单击添加即可将触发器添加到 AWS Lambda。

AWS Lambda 触发器发送邮件

当数据插入 AWS Lambda 时,AWS Lambda 将被触发。事件参数将包含插入的 dynamodb 数据。这将从事件中读取数据并发送电子邮件。

发送电子邮件

要发送电子邮件,您需要按照以下步骤操作:

步骤 1

转到 AWS 服务并选择 SES(简单电子邮件服务)。验证我们需要向其发送电子邮件的电子邮件,如所示:

Verify Email

步骤 2

单击验证新电子邮件地址按钮以添加电子邮件地址。

Verify a New Email

步骤 3

输入要验证的电子邮件地址。电子邮件地址将从 Amazon 接收激活邮件,需要单击该邮件。激活完成后,电子邮件 ID 将被验证,并且可以与 AWS 服务一起使用。

步骤 4

读取事件数据并发送电子邮件的 AWS Lambda 代码如下所示:

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");
      }
   });
}

现在,保存 Lambda 函数和 DynamoDB 表中的数据。

在 DynamoDB 中添加数据

使用以下顺序在 DynamoDB 中添加数据。

步骤 1

转到在 Dynamodb 中创建的customer表。

Customer Created

步骤 2

单击创建项目

Create Item Dynamo

步骤 3

单击保存按钮并检查 AWS Lambda 中提供的电子邮件 ID,以查看 AWS Lambda 是否已发送邮件。

Gmail
广告