You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:15:31