如何用EventBridge筛选DynamoDB流中特定状态的插入与变更事件?
用EventBridge过滤器筛选特定DynamoDB流事件的方案
问题描述
需要通过EventBridge规则筛选DynamoDB流事件,仅保留以下两种场景:
- 插入新行,且
state.column字段值为state1 - 修改现有行时,
state.column的值从非state1变为state1
尝试过的过滤器规则因INSERT事件无OldImage字段失效,且$or结合null的写法不被EventBridge认可,希望找到纯EventBridge过滤器的实现方案,无需借助Lambda。
解决方案
可以利用EventBridge的$or逻辑运算符,将两种场景拆分为独立条件组合实现,无需依赖Lambda。
正确的过滤器规则
{ "eventName": ["INSERT", "MODIFY"], "dynamodb": { "NewImage": { "state": { "M": { "column": { "S": ["state1"] } } } }, "$or": [ { "eventName": ["INSERT"] }, { "eventName": ["MODIFY"], "OldImage": { "state": { "M": { "column": { "S": [{"anything-but": ["state1"]}] } } } } } ] } }
规则说明
- 基础匹配条件:先统一限定
eventName为INSERT或MODIFY,且NewImage中的state.column值必须是state1,这是两种场景的共同前提。 - 场景拆分处理:
- 第一个
$or分支:单独匹配INSERT事件,不需要判断OldImage(INSERT事件本身不存在该字段)。 - 第二个
$or分支:仅匹配MODIFY事件,同时要求OldImage中的state.column值不等于state1。
- 第一个
这种写法避开了直接对OldImage做null判断的语法限制,通过拆分场景分别处理,完全符合EventBridge过滤规则的语法要求。
内容的提问来源于stack exchange,提问作者user1628056
相关产品推荐
相关产品推荐

