Amazon EventBridge 通知用に、デフォルトの Amazon Simple Notification Service (Amazon SNS) の E メールの件名「AWS 通知メッセージ」を変更したいと考えています。
簡単な説明
Amazon SNS は、AWS サービスをイベントソースとして作成された EventBridge ルールからの通知を受け取り、E メールで配信します。件名「AWS 通知メッセージ」と E メール本文は固定されていることに注意してください。AWS サービスが E メールサブスクリプションを持つ Amazon SNS トピックをトリガーする場合、これらを直接変更することはできません。
ワークフロー
- イベントによって EventBridge ルールがトリガーされます。
- EventBridge ルールのペイロードを使用して、Lambda 関数を呼び出します。
- Lambda 関数で Amazon SNS publish API を呼び出します。
- Amazon SNS から、カスタムの件名と本文を含むメッセージまたは E メール通知が配信されます。
解決策
アーキテクチャに AWS Lambda を組み込み、必要に応じてデフォルトの E メールの件名とメッセージ本文をカスタマイズします。Amazon SNS トピックの代わりに AWS Lambda をEventBridge ルールのターゲットとして使用できます。次に、Lambda 関数を使用して、カスタム E メールの件名と本文を含むメッセージをサブスクライバーのいる Amazon SNS トピックに発行します。
通知をカスタマイズするには、次の手順に従います。
SNS トピックと、E メールのサブスクリプションを作成する
- SNS トピックを作成します。
- E メールサブスクリプションを作成します。
Lambda 関数を作成する
-
Lambda コンソールの関数のページを開きます。
-
[関数の作成] を選択します。
-
[最初から作成] を選択します。
-
関数名を指定し、ランタイムには Python 3.10 を選択します。
-
実行ロールを作成します。このロールには、指定した SNS トピックを公開するために必要な権限が必要です。ここでは、Lambda 関数が Lambda の AWS マネージドポリシーで作成されています。
-
関数の実行ロールに AWS Lambda BasicExecutionRole と 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 トピックからの E メール通知を受け取ることができないのはなぜですか?
Amazon SNS サブスクリプションが手動で非アクティブ化されたとの E メールが AWS から届いたのですが、なぜですか?
メーリングリストの受信者が Amazon SNS トピックに関する E メールから他のメンバーのサブスクリプションを解除できないようにするには、どうすればよいですか?
Amazon CloudWatch アラームトリガーに関する SNS 通知が届かなくなったのはなぜですか?
Lambda と Amazon SES を使用して E メールを送信する方法を教えてください。