如何自定义AWS RDS事件通知邮件内容?SNS转SES配置疑问求解
自定义AWS RDS事件通知邮件内容的实现方案
我之前也碰到过一模一样的问题——SNS默认发的RDS事件邮件太简略,根本没法快速定位问题。核心解决思路是通过中间处理层(Lambda)改造事件内容,再用SES发送自定义邮件,下面给你两种可行的方案:
方案一:SNS + Lambda + SES 链式处理
这种方案适合已经有现成SNS主题,或者需要给多个目标推送事件的场景:
- 第一步:保留原有RDS事件配置,将目标设为你的SNS主题,确保RDS能正常把事件推送到SNS。
- 第二步:创建Lambda函数,订阅这个SNS主题。当SNS收到RDS事件时会自动触发Lambda,你能在Lambda的事件参数里拿到完整的RDS事件JSON数据(比如
event.Records[0].Sns.Message就是原始事件内容)。 - 第三步:在Lambda里解析这份JSON,提取关键信息:比如实例ID、事件类型、事件时间、详细描述等,然后按照你想要的格式拼接邮件内容——比如加上实例所属的VPC、环境标签,甚至自定义的故障排查提示。
- 第四步:让Lambda调用SES的
SendEmail或SendTemplatedEmailAPI发送邮件。记得给Lambda添加ses:SendEmail的IAM权限,同时在SES里验证你的发件邮箱/域名,避免邮件被拦截。- 进阶技巧:如果经常要调整邮件格式,建议用SES的邮件模板功能,先在SES控制台创建带占位符的模板(比如
{{instanceId}}、{{eventTime}}),然后Lambda把解析后的参数传入模板,这样修改格式不用改代码。
- 进阶技巧:如果经常要调整邮件格式,建议用SES的邮件模板功能,先在SES控制台创建带占位符的模板(比如
方案二:直接用Lambda接收RDS事件(跳过SNS)
如果不需要给多个目标推送事件,直接让RDS触发Lambda更高效:
- 在RDS事件通知配置里,目标选择Lambda函数,而非SNS主题。RDS会直接把事件JSON推送到Lambda,省去SNS中转的步骤。
- 后续流程和方案一一致:Lambda解析事件数据,调用SES发送自定义邮件,权限和验证要求也相同。
关于SES的小误区
你之前看到SES里只有退信、投诉的SNS主题选项,那是SES用来接收自身运行事件的(比如邮件发送失败、被用户投诉),不是用来接收外部事件的。我们需要的是主动调用SES的发送API,而非让SES被动订阅事件,这是两个完全不同的场景。
注意事项
- 权限配置:确保Lambda的IAM角色包含
ses:SendEmail(或ses:SendTemplatedEmail)权限,以及CloudWatch Logs权限,方便排查问题。 - SES验证:必须验证发件邮箱或域名,否则AWS会限制发送范围(默认只能发给已验证的邮箱)。
- 测试:先手动触发一个RDS事件(比如手动创建快照),验证Lambda是否正确解析数据,邮件内容是否符合预期。
内容的提问来源于stack exchange,提问作者Preethi Jahnavi
相关产品推荐
相关产品推荐

