如何通过AWS Lambda测试事件向SNS主题发消息?测试触发失败排查
核心原因
你踩了Lambda调用类型的规则坑:你配置的「运行失败触发SNS」是异步调用专属的失败目标(On-failure destination),这个规则只在Lambda被异步触发时才生效。
你在控制台点「Test」按钮发起的是同步调用,同步调用的报错会直接把结果返回给调用方(也就是你当前打开的控制台页面),完全不会走异步调用的失败投递流程,当然不会触发SNS。
验证配置是否正常的方法
你现有配置(SNS邮箱订阅、Lambda执行角色SNS权限)都没问题,只要用异步方式触发一次失败调用就能验证SNS通知正常:
- 用AWS CLI执行异步调用命令,把命令里的函数名替换成你自己的即可:
aws lambda invoke --function-name 替换为你的Lambda函数名 --invocation-type Event --payload '{"test":1}' out.json
命令里的--invocation-type Event就是指定异步调用,执行后等待数秒,你订阅的邮箱就能收到失败通知。 - 也可以给Lambda绑定异步触发源(比如EventBridge定时规则、S3上传事件),通过触发源发起调用,失败时也会正常投递SNS消息。
补充说明
如果你需要同步调用场景(包括控制台Test、API网关同步触发、SDK同步调用)下的失败也发通知,不要使用异步失败目标配置,可选择以下两个方案:
- 配置CloudWatch告警监控Lambda的
Errors指标,告警触发时直接发送SNS通知 - 给Lambda配置死信队列(DLQ),同步/异步调用的失败事件都会投递到DLQ,再配置DLQ的触发逻辑发送通知即可
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

