Terraform配置DynamoDB流Lambda事件过滤规则报错如何解决
问题原因
过滤规则语法不符合Lambda事件源过滤的规范,具体错误点:
- 规则层级嵌套错误:
anything-but是Lambda事件过滤的内置匹配运算符,需要直接作用于字段的匹配逻辑,不能放在数组内部作为数组元素。 - DynamoDB Stream事件结构适配错误:Stream记录中
NewImage下的字段格式为<字段名>: {<数据类型标识>: <字段值/匹配规则>},数据类型标识(如本例的BOOL)对应的取值直接写匹配规则即可,不需要额外包裹数组。你的配置中给BOOL的值套了一层方括号,会被服务端识别为要匹配数组类型的BOOL值,和实际数据结构不符,因此抛出无效模式错误。
修正方案
删除BOOL取值外层多余的数组包裹,将anything-but规则直接作为BOOL的属性值即可,修正后的完整配置:
filter_criteria { filter { pattern = jsonencode({ dynamodb = { NewImage = { completed = { BOOL = { "anything-but": [true] } } } } }) } }
补充说明:该规则会命中所有
completed字段值不等于true的记录,包含completed值为false、以及记录中不存在completed字段的场景。如果需要强制要求记录必须存在completed字段、且值不为true,可以额外增加exists: true的匹配规则。
内容的提问来源于stack exchange,提问作者SadPanda
相关产品推荐
相关产品推荐

