Amazon SNSのEメール通知のデフォルトの件名をAWS Step FunctionsとAmazon EventBridge Input Transformerで変更してみた
Amazon SNSのEメール通知のデフォルトの件名を変えたい
こんにちは、のんピ(@non____97)です。
皆さんはAmazon SNSのEメール通知のデフォルトの件名を変えたいと思ったことはありますか? 私はあります。
デフォルトの件名は「AWS Notification Message」です。どんなイベントの通知でも「AWS Notification Message」です。
Eメールの件名でフィルタリングや振り分けをする場面もあると思うので、メールの件名はカスタマイズしたいですよね。
AWS公式では、Eメールの件名を変えるために、Amazon SNS publish API を呼び出すLambda関数を用意する方法を紹介しています。
しかし、Lambda関数を用意するとコードのメンテナンスが必要になります。
もっと手間なく実現できないかと考えたところ、AWS Step Functionsに白羽の矢が立ちました。
そこで、今回は「Amazon SNSのEメール通知のデフォルトの件名をAWS Step FunctionsとAmazon EventBridge Input Transformerで変更する方法」を紹介します。
いきなりまとめ
- Amazon EventBridge Input Transformerで通知したいメッセージと件名を整形し、AWS Step FunctionsでAmazon SNS publish API を呼び出す
検証の構成
AWS Step Functionsは200以上のAWSサービスのAPIを呼び出すことができます。
これを利用してAmazon SNS publish API を呼び出します。
Eメールの件名をAWS Step Functionsのワークフローにハードコーディングをしないように、Amazon EventBridge Input Transformerで通知したいメッセージと件名を整形してから、ステートマシンを実行します。
やってみた
ステートマシンとEventBridgeルールの作成
それでは実際にやってみます。
まず、以下のようにAmazon SNS publish API を呼び出すステートマシンを用意します。
{ "StartAt": "PublishSns", "States": { "PublishSns": { "End": true, "Type": "Task", "Resource": "arn:aws:states:::aws-sdk:sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-east-1:<AWSアカウントID>:ChangeSubjectOfEmailNotificationsStack-EmailSnsTopic81EA33AC-1OIW9F5WJDUZ6", "Message.$": "$.message", "Subject.$": "$.subject" } } } }
続いて、イベント通知をするためのEventBridgeルールを作成します。ターゲットは上述のステートマシンで、Input Transformerを使用して、通知したいメッセージと件名を整形します。
作成したEventBridgeルールは以下の通りです。stateMachine:StateMachineTest001
というステートマシンの実行状態が変わったときにトリガーするようにしています。
通知確認
下準備ができたので、意図したとおりのEメールが届くのかを確認をします。
ステートマシンstateMachine:StateMachineTest001
を実行すると、件名が「The execution status of the state machine in AWS account "<AWSアカウントID>" has changed to "<ステータス>"」となっているEメールが2件届きました。
めでたし。めでたし。
AWS Step Functionsやっぱりすごい
Amazon SNSのEメール通知のデフォルトの件名をAWS Step FunctionsとAmazon EventBridge Input Transformerで変更する方法を紹介しました。
APIを直接呼び出せるようになってから、AWS Step Functionsの捗り具合がすごいですね。
また、今回の検証で使用したSNSトピックとステートマシンはAWS CDKでデプロイしました。そちらのコードは以下リポジトリにアップロードしています。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!