如何更改 EventsBridge 规则的原定设置 Amazon SNS 电子邮件主题行“AWS 通知消息”?

上次更新时间:2021 年 12 月 14 日

我将我的 Amazon Simple Notification Service (Amazon SNS) 配置为从具有多个事件源的 Amazon EventsBridge 规则中接收电子邮件通知。如何根据触发通知的事件自定义原定设置 SNS 电子邮件主题行“AWS 通知消息”和电子邮件正文?

简短描述

目前无法使用 Amazon SNS 控制台根据特定的 EventBridge 规则自定义 Amazon SNS 电子邮件的消息。

使用 Lambda 函数而不是 Amazon SNS 主题作为 EventBridge 规则的目标。然后,将 Lambda 函数配置为在受到 EventBridge 规则触发时发布自定义消息到 Amazon SNS 主题。

以下是该逻辑的工作原理:

  1. EventBridge 规则已触发。
  2. Lambda 函数使用 EventBridge 规则的有效负载进行调用。
  3. 该函数调用 Amazon SNS 发布 API
  4. Amazon SNS 将发送包含自定义主题或消息的电子邮件通知。

解决方法

注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

创建一个 AWS Lambda 函数,该函数设置为 EventBridge 规则的目标

有关更多信息,请参阅教程:使用 EventBridge 计划 AWS Lambda 函数

重要提示:确保 Lambda 函数的执行角色有权向 Amazon SNS 主题发布内容。例如,如果您的函数执行角色具有 AWS 托管策略 AWSLambdaBasicExecutionRole,您必须将 AmazonSNSFullAccess 策略附加到执行角色。

将 Lambda 函数设置为 EventBridge 规则的目标后,以下基于资源的策略将自动添加到该函数中:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "AWSEvents_CWRule_CustomEmailSubject_Id196649187337",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "Lambda-function-ARN",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "Eventbridge-rule-ARN"
        }
      }
    }
  ]
}

配置 Lambda 函数以将自定义电子邮件主题或自定义消息发布到 Amazon SNS 主题

有关更多信息,请参阅发布(API 参考)

重要提示:以下代码片段仅供参考。在测试代码片段之前,请勿在生产环境中使用它们。

示例 Python 发布 API 调用

import boto3
import json
sns_arn = "SNS_TOPC_ARN"

def lambda_handler(event, context):
    client = boto3.client("sns")
    resp = client.publish(TargetArn=sns_arn, Message=json.dumps(event), Subject="CUSTOM_SUBJECT")

示例 JavaScript/NodeJS 发布 API 调用

const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    let sns = new AWS.SNS();
    sns.publish({
    TopicArn: 'SNS_TOPIC_ARN',
    Message: JSON.stringify(event), 
    Subject: 'CUSTOM_SUBJECT'
    }, function(error, data){
       if(error) console.log(error, error.stack);
       callback(error, data);
     });
};

重要提示:确保将 SNS_TOPIC_ARNCUSTOM_SUBJECT 的值替换为您自己的输入。

通过这种方式,您可以使用 Lambda 函数自定义 EventBridge 规则的电子邮件主题或消息并将其转发到 Amazon SNS 主题。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?