EventBridge规则异常:指定SSM文档成功时无法触发Lambda的问题
解决EventBridge规则添加SSM documentName条件后无法触发的问题
核心问题:模式匹配未对齐SSM事件的实际结构
你遇到的问题大概率是EventBridge规则模式里的字段路径、大小写或匹配逻辑和SSM发送的实际事件不匹配,以下是具体排查和修复方案:
1. 先确认SSM成功事件的真实结构
SSM命令执行成功时发送到EventBridge的事件,核心结构大致如下(截取关键部分):
{ "source": "aws.ssm", "detail-type": "SSM Command Execution Status Change", "detail": { "commandId": "xxxx-xxxx-xxxx-xxxx", "status": "Success", "documentName": "MyDocument", "instanceIds": ["i-xxxxxx"], // 其他字段... } }
重点注意:documentName是嵌套在detail对象里的驼峰式字段,大小写不能错。
2. 正确的规则模式示例
直接用以下模式替换你当前的配置,确保完全匹配:
{ "source": ["aws.ssm"], "detail-type": ["SSM Command Execution Status Change"], "detail": { "status": ["Success"], "documentName": ["MyDocument"] } }
3. 常见错误排查点
- 字段层级错误:很多人会把
documentName写在根层级(和source同级),但它实际属于detail子对象,这会直接导致匹配失败 - 大小写错误:把
documentName写成DocumentName/documentname,SSM事件的字段是严格驼峰式的,大小写不匹配就会过滤掉事件 - 文档版本问题:如果执行的是带版本号的文档(比如
MyDocument:1),只写MyDocument会匹配不上,这种情况可以用通配符匹配:"documentName": ["MyDocument*"],或者确保执行的是无版本的默认文档 - 事件类型错误:误用了其他
detail-type值,正确的类型必须是SSM Command Execution Status Change
4. 快速验证方法
- 去EventBridge的「事件总线」里找到一条你期望触发的SSM成功事件
- 复制该事件的JSON内容
- 打开EventBridge规则的「模式测试」工具,把事件JSON粘贴进去,再输入你的规则模式,查看是否能匹配成功
只要模式能通过测试工具的验证,规则就能正常触发Lambda。
内容的提问来源于stack exchange,提问作者NS Midhun
相关产品推荐
相关产品推荐

