我想要修改 Amazon EventBridge 通知的标准 Amazon Simple Notification Service(Amazon SNS)电子邮件主题行“AWS 通知消息”。
简短描述
Amazon SNS 接收符合 EventBridge 规则的通知,该规则以 AWS 服务作为事件源创建,后通过电子邮件传送。请注意,主题行“AWS 通知消息”和电子邮件正文是固定的。如果任何 AWS 服务触发了包含电子邮件订阅的 Amazon SNS 主题,则您不能直接更改这些内容。
工作流
- 当有事件触发了 EventBridge 规则。
- EventBridge 规则的负载会调用 Lambda 函数。
- Lambda 函数会调用 Amazon SNS 发布 API。
- Amazon SNS 传送带有自定义“主题”和“正文”的消息或电子邮件通知。
解决方法
在架构中包括 AWS Lambda,以根据需要自定义默认电子邮件主题行和消息正文。您可以使用 AWS Lambda(而不是 Amazon SNS 主题)作为 EventBridge 规则的目标。然后,使用 Lambda 函数将具有自定义电子邮件主题和正文的消息发送给 Amazon SNS 主题的订阅用户。
请按照下面的步骤自定义通知。
创建 SNS 主题和电子邮件订阅
- 创建 SNS 主题。
- 创建电子邮件订阅。
创建 Lambda 函数
-
打开 Lambda 控制台的函数页面。
-
选择创建函数。
-
选择从头开始创作。
-
提供函数名称,然后将运行时选择为 Python 3.10。
-
创建执行角色。此角色必须具有发布指定 SNS 主题所需的权限。此处的 Lambda 函数应该是使用适用于 Lambda 的 AWS 托管式策略创建的。
-
将 AWSLambdaBasicExecutionRole 和 AmazonSNSFullAccess 策略附加到函数的执行角色。若要附加适用于 Lambda 的执行策略,请参阅 Lambda 执行角色。
-
选择创建函数。在函数代码编辑器中,粘贴此代码:
**重要事项:**此代码片段仅供参考。在测试之前,请勿在生产环境中使用示例代码片段。
示例: Python 示例代码
import boto3
import json
sns_arn = "sns_topic_arn"
def lambda_handler(event, context):
client = boto3.client("sns")
resp = client.publish(TargetArn=sns_arn, Message=json.dumps(event), Subject="This is the customized subject line")
注意:请将 sns_topic_arn 替换为创建 SNS 主题和电子邮件通知中的主题 ARN。请将**“这是自定义主题行”**替换为您自己的主题行,并加引号。
-
选择部署。
创建 EventBridge 规则
使用 Amazon EventBridge 控制台创建 EventBridge 规则。
注意:
- 对于 AWS 文档中的步骤 11 选择目标,请选择您根据创建 Lambda 函数创建的 Lambda 函数。
- 提供您想为您的 Lambda 函数所使用的负载消息。
调用 EventBridge 规则时,Lambda 函数会向 Amazon SNS 发出 Publish API 调用。它会转发事件规则的消息,同时更改用于传送消息的主题。然后,订阅用户在其邮箱中接收带有自定义主题行的电子邮件。
相关信息
为什么我无法收到来自我的 Amazon SNS 主题的电子邮件通知?
为什么我收到一封来自 AWS 的电子邮件,说我的 Amazon SNS 订阅被手动禁用?
如何防止邮件列表收件人从我的 Amazon SNS 主题电子邮件取消订阅列表上的所有人?
为什么我没有收到我的 Amazon CloudWatch 警报触发器的 SNS 通知?
如何使用 Lambda 和 Amazon Simple Email Service(Amazon SES)发送电子邮件?