Amazon SNSのEメール通知のデフォルトの件名をAWS Step FunctionsとAmazon EventBridge Input Transformerで変更してみた

2022.02.18

Amazon SNSのEメール通知のデフォルトの件名を変えたい

こんにちは、のんピ(@non____97)です。

皆さんはAmazon SNSのEメール通知のデフォルトの件名を変えたいと思ったことはありますか? 私はあります。

デフォルトの件名は「AWS Notification Message」です。どんなイベントの通知でも「AWS Notification Message」です。

Amazon SNSのEメール通知のデフォルトの件名

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を使用して、通知したいメッセージと件名を整形します。

Input Transformerを使用して、通知したいメッセージと件名を整形

作成したEventBridgeルールは以下の通りです。stateMachine:StateMachineTest001というステートマシンの実行状態が変わったときにトリガーするようにしています。

作成したEventBridgeルール

通知確認

下準備ができたので、意図したとおりのEメールが届くのかを確認をします。

ステートマシンstateMachine:StateMachineTest001を実行すると、件名が「The execution status of the state machine in AWS account "<AWSアカウントID>" has changed to "<ステータス>"」となっているEメールが2件届きました。

Eメール通知の確認 1

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)でした!