如何變更 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/Node.js 發佈 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 主題。