如何自定义默认 Amazon SNS 电子邮件消息?

2 分钟阅读
0

我想要修改 Amazon EventBridge 通知的标准 Amazon Simple Notification Service(Amazon SNS)电子邮件主题行“AWS 通知消息”。

简短描述

Amazon SNS 接收符合 EventBridge 规则的通知,该规则以 AWS 服务作为事件源创建,后通过电子邮件传送。请注意,主题行“AWS 通知消息”和电子邮件正文是固定的。如果任何 AWS 服务触发了包含电子邮件订阅的 Amazon SNS 主题,则您不能直接更改这些内容。

工作流

  1. 当有事件触发了 EventBridge 规则。
  2. EventBridge 规则的负载会调用 Lambda 函数。
  3. Lambda 函数会调用 Amazon SNS 发布 API。
  4. Amazon SNS 传送带有自定义“主题”和“正文”的消息或电子邮件通知。

解决方法

在架构中包括 AWS Lambda,以根据需要自定义默认电子邮件主题行和消息正文。您可以使用 AWS Lambda(而不是 Amazon SNS 主题)作为 EventBridge 规则的目标。然后,使用 Lambda 函数将具有自定义电子邮件主题和正文的消息发送给 Amazon SNS 主题的订阅用户。

请按照下面的步骤自定义通知。

创建 SNS 主题和电子邮件订阅

  1. 创建 SNS 主题
  2. 创建电子邮件订阅

创建 Lambda 函数

  1. 打开 Lambda 控制台的函数页面

  2. 选择创建函数

  3. 选择从头开始创作

  4. 提供函数名称,然后将运行时选择为 Python 3.10

  5. 创建执行角色。此角色必须具有发布指定 SNS 主题所需的权限。此处的 Lambda 函数应该是使用适用于 Lambda 的 AWS 托管式策略创建的。

  6. AWSLambdaBasicExecutionRoleAmazonSNSFullAccess 策略附加到函数的执行角色。若要附加适用于 Lambda 的执行策略,请参阅 Lambda 执行角色

  7. 选择创建函数。在函数代码编辑器中,粘贴此代码:
    **重要事项:**此代码片段仅供参考。在测试之前,请勿在生产环境中使用示例代码片段。

    示例: 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。请将**“这是自定义主题行”**替换为您自己的主题行,并加引号。

  8. 选择部署

创建 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)发送电子邮件?

AWS 官方
AWS 官方已更新 1 年前