AWS邮件退信与投诉自动化处理:Lambda测试及CloudWatch规则疑问
AWS Lambda测试事件选择与CloudWatch Matched Event说明
我刚好之前处理过类似的AWS邮件退信/投诉自动化场景,给你梳理下具体的解决方案:
一、Lambda测试事件的选择与构造
你的Lambda函数是用来处理SES的退信(Bounce)和投诉(Complaint)事件的,而这类事件通常是通过SNS主题转发给Lambda的(这也是官方CloudFormation模板的常规配置)。所以测试时你需要模拟SNS传递的SES事件格式,步骤如下:
- 打开Lambda控制台,进入目标函数的测试界面,在测试事件模板中选择**"Amazon SNS Topic Notification"**——这是最贴合真实触发场景的预设模板。
- 替换模板中的
Message字段内容,改成SES退信或投诉事件的JSON格式:- 退信事件示例(直接替换
Message里的字符串内容):"{\"notificationType\":\"Bounce\",\"bounce\":{\"bounceType\":\"Permanent\",\"bounceSubType\":\"General\",\"bouncedRecipients\":[{\"emailAddress\":\"recipient@example.com\",\"action\":\"failed\",\"status\":\"5.1.1\",\"diagnosticCode\":\"smtp;550 5.1.1 User unknown\"}],\"timestamp\":\"2023-10-01T12:00:00.000Z\",\"feedbackId\":\"00000123456789012345678901234567\",\"remoteMtaIp\":\"192.0.2.1\",\"reportingMta\":\"dsn.example.com\"},\"mail\":{\"timestamp\":\"2023-10-01T11:59:00.000Z\",\"source\":\"sender@example.com\",\"sourceArn\":\"arn:aws:ses:us-east-1:123456789012:identity/example.com\",\"sourceIp\":\"192.0.2.2\",\"sendingAccountId\":\"123456789012\",\"messageId\":\"0000012345678901-abc123-def456-ghi789-jkl012\",\"destination\":[\"recipient@example.com\"]}}" - 投诉事件示例:
"{\"notificationType\":\"Complaint\",\"complaint\":{\"userAgent\":\"Example Mail Client/1.0\",\"complainedRecipients\":[{\"emailAddress\":\"recipient@example.com\"}],\"timestamp\":\"2023-10-01T12:00:00.000Z\",\"feedbackId\":\"00000123456789012345678901234567\",\"complaintFeedbackType\":\"abuse\"},\"mail\":{\"timestamp\":\"2023-10-01T11:59:00.000Z\",\"source\":\"sender@example.com\",\"sourceArn\":\"arn:aws:ses:us-east-1:123456789012:identity/example.com\",\"sourceIp\":\"192.0.2.2\",\"sendingAccountId\":\"123456789012\",\"messageId\":\"0000012345678901-abc123-def456-ghi789-jkl012\",\"destination\":[\"recipient@example.com\"]}}"
- 退信事件示例(直接替换
- 测试时可以把里面的ARN、邮箱地址等字段改成你自己环境的信息,不过只要格式正确,Lambda就能正常解析并执行逻辑。
二、CloudWatch规则中的“Matched Event”是什么
这里的Matched Event指的是CloudWatch Events(现在叫Amazon EventBridge)捕获到的、完全符合你的规则触发条件的事件实例:
- 在你的场景中,CloudWatch规则应该被配置为监听SES生成的退信/投诉事件(或者SNS转发的这类事件),当有符合条件的事件产生时,EventBridge会把这个事件完整地传递给Lambda作为输入。
- 你可以在CloudWatch规则的“事件历史”中查看这些Matched Event的具体结构,它就是触发Lambda的原始事件数据,和你刚才构造的测试事件结构是一致的。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

