接下来,按照
填充表
过程填充表。
要填充表,请先创建一个名为
libs
的目录,然后在其中创建一个名为
dynamoClient.js
的文件,再将下面的内容粘贴到其中。
const { DynamoDBClient } = require ( "@aws-sdk/client-dynamodb" );
// Set the AWS Region.
const REGION = "REGION"; // e.g. "us-east-1"
// Create an Amazon Lambda service client object.
const dynamoClient = new DynamoDBClient({region:REGION});
module.exports = { dynamoClient };
此代码可从此处获得 GitHub。
接下来,在项目文件夹的根目录populate-table.js
中创建一个名为的文件,然后将此处的内容复制 GitHub到其中。对于其中一项,将 phone
属性的值替换为 E.164 格式的有效手机号码,将 startDate
的值替换为今天的日期。
在命令行处,运行以下命令。
node populate-table.js
const { BatchWriteItemCommand } = require ( "aws-sdk/client-dynamodb" );
const {dynamoClient} = require ( "./libs/dynamoClient" );
// Set the parameters.
export const params = {
RequestItems: {
Employees: [
PutRequest: {
Item: {
id: { N: "1" },
firstName: { S: "Bob" },
phone: { N: "155555555555654" },
startDate: { S: "2019-12-20" },
PutRequest: {
Item: {
id: { N: "2" },
firstName: { S: "Xing" },
phone: { N: "155555555555653" },
startDate: { S: "2019-12-17" },
PutRequest: {
Item: {
id: { N: "55" },
firstName: { S: "Harriette" },
phone: { N: "155555555555652" },
startDate: { S: "2019-12-19" },
export const run = async () => {
try {
const data = await dbclient.send(new BatchWriteItemCommand(params));
console.log("Success", data);
} catch (err) {
console.log("Error", err);
run();
此代码可从
此处获
得 GitHub。
创建 AWS Lambda 函数
在
libs
目录中,创建名为
snsClient.js
和
lambdaClient.js
的文件,并将以下内容分别粘贴到这些文件中。
const
{
SNSClient } = require("@aws-sdk/client-sns");
// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create an Amazon SNS service client object.
const snsClient = new SNSClient(
{
region: REGION });
module.exports =
{
snsClient };
Replace(替换)
REGION
与该 AWS 地区合作。此代码可从
此处获
得 GitHub。
const
{
LambdaClient } = require("@aws-sdk/client-lambda");
// Set the AWS Region.
const REGION = "REGION"; //e.g. "us-east-1"
// Create an Amazon Lambda service client object.
const lambdaClient = new LambdaClient(
{
region: REGION });
module.exports =
{
lambdaClient };
Replace(替换)
REGION
与该 AWS 地区合作。此代码可从
此处获
得 GitHub。
首先,导入所需的 AWS SDK for JavaScript (v3) 模块和命令。然后计算今天的日期并将其分配给一个参数。然后,为
ScanCommand
创建参数。Replace(替换)
TABLE_NAME
使用您在本示例
创建 AWS 资源
部分中创建的表的名称。
下面的代码段演示了此步骤。(有关完整示例,请参阅
捆绑 Lambda 函数
。)
const { ScanCommand } = require("@aws-sdk/client-dynamodb");
const { PublishCommand } = require("@aws-sdk/client-sns");
const { snsClient } = require("./libs/snsClient");
const { dynamoClient } = require("./libs/dynamoClient");
// Get today's date.
const today = new Date();
const dd = String(today.getDate()).padStart(2, "0");
const mm = String(today.getMonth() + 1).padStart(2, "0"); //January is 0!
const yyyy = today.getFullYear();
const date = `${yyyy}-${mm}-${dd}`;
// Set the parameters for the ScanCommand method.
const params = {
// Specify which items in the results are returned.
FilterExpression: "startDate = :topic",
// Define the expression attribute value, which are substitutes for the values you want to compare.
ExpressionAttributeValues: {
":topic": { S: date },
// Set the projection expression, which are the attributes that you want.
ProjectionExpression: "firstName, phone",
TableName: "Employees",
扫描 DynamoDB 表
首先,创建一个名为 async/await 函数sendText
,用于使用 Amazon 发布短信。SNS PublishCommand
然后,添加一个 try
块模式,用于扫描 DynamoDB 表中是否有工作周年纪念日在今天的员工,然后调用 sendText
函数向这些员工发送短信。如果发生错误,则将调用 catch
块。
下面的代码段演示了此步骤。(有关完整示例,请参阅捆绑 Lambda 函数。)
// Helper function to send message using Amazon SNS.
exports.handler = async () => {
// Helper function to send message using Amazon SNS.
async function sendText(textParams) {
try {
await snsClient.send(new PublishCommand(textParams));
console.log("Message sent");
} catch (err) {
console.log("Error, message not sent ", err);
try {
// Scan the table to identify employees with work anniversary today.
const data = await dynamoClient.send(new ScanCommand(params));
for (const element of data.Items) {
const textParams = {
PhoneNumber: element.phone.N,
Message: `Hi ${element.firstName.S}; congratulations on your work anniversary!`,
// Send message using Amazon SNS.
sendText(textParams);
} catch (err) {
console.log("Error, could not scan table ", err);
捆绑 Lambda 函数
本主题介绍如何将本示例的模块mylambdafunction.ts
和必需的 AWS SDK for JavaScript 模块捆绑到名index.js
为的捆绑文件中。
如果您尚未安装 Webpack,请按照本示例中的完成先决条件任务部分进行安装。
在命令行中运行以下命令,将本示例 JavaScript 的捆绑到名为的文件中<index.js>
:
webpack mylambdafunction.ts --mode development --target node --devtool false --output-library-target umd -o index.js
请注意,输出被命名为 index.js
。这是因为 Lambda 函数必须有一个 index.js
处理程序才能工作。
将捆绑的输出文件压缩成名mylambdafunction.zip
为的ZIP文件。index.js
将 mylambdafunction.zip
上传到您在本教程的创建 AWS 资源 主题中创建的 Amazon S3 存储桶。
部署 Lambda 函数
在项目的根目录中,创建一个 lambda-function-setup.ts
文件,然后将以下内容粘贴到其中。
Replace(替换) BUCKET_NAME
使用您将 Lambda 函数ZIP版本上传到的 Amazon S3 存储桶的名称。Replace(替换) ZIP_FILE_NAME
使用名称命名您的 Lambda 函数的ZIP版本。Replace(替换) ROLE
使用您在本教程创建 AWS 资源 主题中创建的IAM角色的 Amazon 资源编号 (ARN)。Replace(替换) LAMBDA_FUNCTION_NAME
带有 Lambda 函数的名称。
// Load the required Lambda client and commands.
const {
CreateFunctionCommand
} = require ( "@aws-sdk/client-lambda" );
const { lambdaClient} = require ( "./libs/lambdaClient.js );
// Set the parameters.
const params = {
Code: {
S3Bucket: "BUCKET_NAME", // BUCKET_NAME
S3Key: "ZIP_FILE_NAME", // ZIP_FILE_NAME
FunctionName: "LAMBDA_FUNCTION_NAME",
Handler: "index.handler",
Role: "IAM_ROLE_ARN", // IAM_ROLE_ARN; e.g., arn:aws:iam::650138640062:role/v3-lambda-tutorial-lambda-role
Runtime: "nodejs12.x",
Description:
"Scans a DynamoDB table of employee details and using Amazon Simple Notification Services (Amazon SNS) to " +
"send employees an email on each anniversary of their start-date.",
const run = async () => {
try {
const data = await lambdaClient.send(new CreateFunctionCommand(params));
console.log("Success", data); // successful response
} catch (err) {
console.log("Error", err); // an error occurred
run();
在命令行中输入以下内容以部署 Lambda 函数。
node lambda-function-setup.ts
此代码示例可在此处找到 GitHub。
将API网关配置为调用 Lambda 函数