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 的表以及如何在该表中输入数据。
在输入数据并使用 Amazon SES 服务发送邮件后触发 AWS Lambda 函数。
解释示例流程的基本框图如下所示-
使用主键在 DynamoDB 中创建表
登录 AWS 控制台。转到 AWS 服务并选择 DynamoDB,如下所示。选择 DynamoDB。
DynamoDB 显示的选项如下所示-
现在,单击
创建表以创建如图所示的表。我们将该表命名为
customer,该表的主键为
cust_id。单击
创建按钮将表添加到dynamodb。
创建的表如下图-
我们可以将项目添加到创建的表中,如下所示-
点击
项目,然后点击
创建项目按钮,如图所示-
创建具有使用 DynamoDB 和 AWS Lambda 的权限的角色
要创建角色,请转到 AWS 服务并单击 IAM。
让我们创建一个仅用于之前创建的 DynamoDB 表的策略-
现在,选择一个
服务。观察我们选择的服务是
DynamoDB。对于
操作,我们已经采取了所有
Dynamodb 操作,即访问列表、读取和写入。对于
资源,我们将选择表资源类型操作。当您点击它时,您可以看到如下屏幕-
现在,如图所示,选择
table 和
Add ARN。我们将从创建的
customer table 中获取
ARN 详细信息,如下所示-
在此处输入
arn 详细信息-
点击
添加按钮保存更改。完成后
点击查看政策。输入策略名称、描述等,如下所示-
点击
创建策略以保存它。将策略添加到要创建的角色。从左侧选择
角色并输入详细信息。
观察添加的策略是
newpolicyfordynamdb、awslambdafullaccess、cloudwatchfullaccess 和
amazonsesfullaccess。添加角色并将在创建 AWS Lambda 函数时使用它。
在 AWS Lambda 中创建函数
因此,我们创建了名为
newlambdafordynamodb 的 Lambda 函数,如图所示。
现在,让我们将 DynamodDB 触发器添加到创建的 AWS Lambda。我们将使用的运行时是 Node.js。
您可以在要为 AWS Lambda 配置的 Dynamodb 触发器中找到以下详细信息-
现在,只需单击
添加即可将触发器添加到 AWS Lambda。
用于发送邮件的 AWS Lambda 触发器
AWS Lambda 将在数据插入 AWS Lambda 时触发。事件参数将插入 dynamodb 数据。这将从事件中读取数据并发送电子邮件。
发送电子邮件
要发送电子邮件,您需要按照以下步骤操作-
步骤 1
转到 AWS 服务并选择 SES(简单电子邮件服务)。验证我们需要向其发送电子邮件的电子邮件,如图所示-
步骤 2
点击按钮
验证新电子邮件地址以添加电子邮件地址。
步骤 3
输入电子邮件地址进行验证。该电子邮件地址将收到来自亚马逊的激活邮件,需要点击该邮件。激活完成后,电子邮件 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: ["xxxxx@gmail.com"]
},
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: "xxxxx@gmail.com"
};
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。
步骤 2
点击
创建项目。
步骤 3
单击
保存按钮并检查 AWS Lambda 中提供的电子邮件 ID,以查看邮件是否已由 AWS Lambda 发送。
