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

AWS DynamoDB技术咨询:如何基于CRUD操作获取邮件通知?

在AWS DynamoDB执行CRUD操作时获取邮件通知的实现方案

要实现DynamoDB CRUD操作的邮件通知,核心是通过DynamoDB Streams捕获表的变更事件,再用Lambda函数处理事件并调用SNS发送邮件,以下是具体步骤:

1. 开启DynamoDB Streams

  • 登录AWS控制台,进入DynamoDB服务,找到目标数据表
  • 切换到「概述」标签页,向下滚动找到「流」模块,点击「启用」
  • 在弹出的配置窗口中,选择流视图类型:
    • NEW_IMAGE:仅捕获新增/更新后的新数据
    • OLD_IMAGE:仅捕获更新前/删除的数据
    • NEW_AND_OLD_IMAGES:同时捕获新旧数据(推荐用于更新操作的完整通知)
    • KEYS_ONLY:仅捕获主键数据
  • 选择完成后点击「启用流」,系统会生成一个流ARN,后续配置Lambda触发器会用到

2. 创建SNS主题并订阅邮箱

  • 进入AWS SNS控制台,点击「创建主题」
  • 主题类型选择「标准」,输入主题名称(如DynamoDB-CRUD-Notifications)和显示名称,点击「创建主题」
  • 进入刚创建的主题详情页,点击「创建订阅」:
    • 协议选择「电子邮件」,输入接收通知的邮箱地址
    • 点击「创建订阅」,此时目标邮箱会收到一封确认邮件,点击邮件中的链接完成订阅验证

3. 创建Lambda函数处理流事件并发送通知

3.1 创建Lambda函数

  • 进入AWS Lambda控制台,点击「创建函数」
  • 选择「从头开始创作」,输入函数名称(如DynamoDB-CRUD-Handler),选择运行时(推荐Python 3.9+或Node.js 18.x),点击「创建函数」

3.2 添加DynamoDB流触发器

  • 在Lambda函数详情页的「配置」标签下,选择「触发器」,点击「添加触发器」
  • 触发器类型选择「DynamoDB」,选择之前开启流的目标数据表
  • 批处理大小按需设置(默认100),起始位置选择「最新」,点击「添加」
  • 系统会自动为Lambda的执行角色添加DynamoDB流的读取权限

3.3 编写Lambda处理代码

以Python为例,以下是基础的事件处理和SNS发送逻辑:

import boto3
import json

# 替换为你的SNS主题ARN
SNS_TOPIC_ARN = 'arn:aws:sns:us-east-1:123456789012:DynamoDB-CRUD-Notifications'
sns_client = boto3.client('sns')

def lambda_handler(event, context):
    for record in event['Records']:
        event_type = record['eventName']
        message_content = ""
        
        # 根据操作类型构造通知内容
        if event_type == 'INSERT':
            new_item = record['dynamodb']['NewImage']
            message_content = f"✅ DynamoDB表执行了*插入*操作\n新数据:\n{json.dumps(new_item, indent=2)}"
        elif event_type == 'MODIFY':
            old_item = record['dynamodb']['OldImage']
            new_item = record['dynamodb']['NewImage']
            message_content = f"🔄 DynamoDB表执行了*更新*操作\n旧数据:\n{json.dumps(old_item, indent=2)}\n新数据:\n{json.dumps(new_item, indent=2)}"
        elif event_type == 'REMOVE':
            deleted_item = record['dynamodb']['OldImage']
            message_content = f"❌ DynamoDB表执行了*删除*操作\n删除的数据:\n{json.dumps(deleted_item, indent=2)}"
        else:
            message_content = f"⚠️ DynamoDB表执行了未知操作:{event_type}"
        
        # 发送邮件通知
        try:
            sns_client.publish(
                TopicArn=SNS_TOPIC_ARN,
                Subject=f"DynamoDB {event_type} 操作通知",
                Message=message_content
            )
        except Exception as e:
            print(f"发送通知失败:{str(e)}")
    
    return {
        'statusCode': 200,
        'body': json.dumps('事件处理完成')
    }

3.4 配置Lambda权限

  • 在Lambda函数的「配置」标签下,选择「权限」,点击执行角色的ARN进入IAM控制台
  • 为该角色添加一条内联策略,允许向目标SNS主题发送消息:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "你的SNS主题ARN"
        }
    ]
}

关键注意事项

  • 流视图类型需根据业务需求选择,如需完整的更新前后数据,务必选NEW_AND_OLD_IMAGES
  • 必须完成SNS订阅的邮箱验证,否则无法收到邮件
  • Lambda的执行角色需同时具备DynamoDB流读取权限和SNS发布权限
  • 可在Lambda中添加更完善的错误处理逻辑,避免单条记录处理失败导致整个批量任务中断

内容的提问来源于stack exchange,提问作者Lokesh K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:39:35