如何使用Node.js在DynamoDB新增记录时触发通知?
使用Node.js实现DynamoDB新增数据时通过Lambda+SNS发送通知的方案与参考资源
核心实现步骤(Node.js版本)
1. 配置DynamoDB触发器
给目标DynamoDB表开启DynamoDB Streams,在Lambda控制台创建函数时,选择DynamoDB作为触发器源,关联目标表的流,事件类型选择INSERT(仅监听新增数据事件)。
2. Lambda函数的Node.js代码示例(基于AWS SDK v3)
以下是处理DynamoDB插入事件并调用SNS发送通知的核心代码:
import { SNSClient, PublishCommand } from "@aws-sdk/client-sns"; import { DynamoDB } from "@aws-sdk/client-dynamodb"; import { unmarshall } from "@aws-sdk/util-dynamodb"; // 初始化SNS客户端 const snsClient = new SNSClient({ region: "你的AWS区域" }); const SNS_TOPIC_ARN = "你的SNS主题ARN"; export const handler = async (event) => { // 遍历DynamoDB流中的记录 for (const record of event.Records) { if (record.eventName === "INSERT") { // 提取新增的数据(转换DynamoDB结构化数据为普通对象) const newItem = unmarshall(record.dynamodb.NewImage); // 构造通知内容 const message = `新数据已添加到DynamoDB表:\n${JSON.stringify(newItem, null, 2)}`; // 调用SNS发布消息 const params = { Message: message, TopicArn: SNS_TOPIC_ARN }; try { const response = await snsClient.send(new PublishCommand(params)); console.log("通知发送成功:", response.MessageId); } catch (err) { console.error("发送通知失败:", err); } } } };
注意:需要给Lambda执行角色添加权限:允许
sns:Publish到指定SNS主题,以及允许读取DynamoDB流数据的权限,避免使用过度宽泛的全量权限。
3. SNS主题配置
- 在SNS控制台创建标准主题,记录主题ARN
- 订阅用户的接收终端(邮箱、手机号、HTTP端点等),完成订阅确认(比如邮箱需点击确认链接)
实用参考资源
- AWS Lambda官方文档:详细说明DynamoDB触发器的配置流程、Node.js运行时环境设置,以及流事件的结构解析
- AWS SDK for JavaScript v3官方文档:SNS客户端初始化、
PublishCommand参数说明和错误处理方法 - DynamoDB Streams官方指南:解释流记录格式、
NewImage字段含义,以及数据提取转换方法 - AWS IAM权限配置文档:指导为Lambda执行角色配置最小权限,避免过度授权
内容的提问来源于stack exchange,提问作者Devansh Goel
相关产品推荐
相关产品推荐

