使用Serverless Framework配置现有SNS Topic实现CloudWatch邮件告警无通知排查
解决Serverless使用现有SNS Topic无法接收Lambda告警邮件的问题
针对你遇到的问题,按以下步骤排查修复:
1. 确认SNS Topic的邮箱订阅状态
手动创建SNS Topic后,Serverless不会自动添加邮箱订阅,需自行完成:
- 登录AWS SNS控制台,找到你创建的
myp-${sls:stage}-alertsTopic - 进入「订阅」标签页,点击「创建订阅」
- 协议选择「电子邮件」,输入目标邮箱地址后完成创建
- 检查该邮箱,点击AWS发送的订阅确认链接完成验证
2. 给SNS Topic添加CloudWatch访问权限
手动创建的Topic默认没有允许CloudWatch Alarms发送消息的权限,需补充访问策略:
- 在SNS Topic详情页,进入「访问策略」标签页,点击「编辑」
- 替换为以下策略(将
Resource值替换为你实际的Topic ARN):
{ "Version": "2008-10-17", "Id": "CloudWatchAlarmSNSPolicy", "Statement": [ { "Sid": "AllowCloudWatchAlarmsToPublish", "Effect": "Allow", "Principal": { "Service": "cloudwatch.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:${aws:region}:${aws:accountId}:myp-${sls:stage}-alerts" } ] }
- 保存策略
3. 验证CloudWatch Alarm与SNS Topic的关联
部署完成后,确认告警已正确绑定到目标Topic:
- 登录AWS CloudWatch控制台,进入「告警」页面
- 找到对应Lambda的告警(如
functionErrors),点击进入详情 - 查看「通知」部分,确认已选择你手动创建的SNS Topic
4. 确认告警触发条件已满足
确保Lambda确实产生了符合告警规则的错误:
- 手动调用Lambda函数并故意抛出异常
- 等待几分钟后,查看CloudWatch告警是否切换为「ALARM」状态,若触发则会发送邮件
5. 检查Serverless配置的准确性
- 确认
custom.alerts.topics.alarm.topic中的ARN拼写正确,包括区域、账号ID和Topic名称 - 可暂时将ARN写死(如
arn:aws:sns:us-east-1:123456789012:myp-dev-alerts),避免变量替换错误后重新部署测试
内容的提问来源于stack exchange,提问作者JimmyTheCode
相关产品推荐
相关产品推荐

