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

如何过滤DynamoDB流中2019版全局表同步产生的事件数据

DynamoDB 2019版全局表流事件识别跨区同步操作的解决方案

2019版DynamoDB全局表默认没有提供类似2017版的aws:rep:updateregion系统字段,但是可以通过以下两种成熟方案实现识别需求:

方案1:通过流事件元数据直接判断(无需修改业务代码)

DynamoDB全局表的跨区域同步操作,会使用DynamoDB官方服务身份发起写入,对应流事件的userIdentity字段会有固定特征:

  • userIdentity.type 固定为 Service
  • userIdentity.principalId 固定为 dynamodb.amazonaws.com

所有本地区域业务侧发起的写入操作(包括IAM用户、角色、其他AWS服务调用等),userIdentity都不会匹配上述特征,由此可以直接区分是否为跨区同步触发的事件。

参考代码示例(Python):

def lambda_handler(event, context):
    for record in event['Records']:
        # 判断是否为全局表跨区同步产生的变更
        is_replica_op = record["userIdentity"]["type"] == "Service" \
                        and record["userIdentity"]["principalId"] == "dynamodb.amazonaws.com"
        if is_replica_op:
            # 处理同步过来的变更的逻辑
            print(f"收到跨区同步变更,事件ID:{record['eventID']}")
        else:
            # 处理本地区域业务发起的变更的逻辑
            print(f"收到本地业务变更,事件ID:{record['eventID']}")

方案2:新增自定义字段标记来源区域(可获取具体源区域信息)

如果需要知道变更具体来自哪个区域,可在业务侧所有写入DynamoDB的逻辑中,统一新增一个自定义字段(比如last_write_region),写入时取当前运行环境的AWS区域值即可:

  • 代码中直接读取环境变量AWS_REGION即可获取当前Lambda/应用所在的区域,写入时赋值给自定义字段
  • 全局表同步时会同步该自定义字段的取值,在流监听器Lambda中读取该字段即可直接判断变更的源区域

注意:需要确保所有写入、更新表数据的逻辑都统一更新该字段,避免出现取值错误的情况。

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:00