はじめに
EventBridgeを使ったアラートを設定した際に、送られてきたメールがJSON形式で読みにくいな、と思った経験はありませんか?
本記事では、入力トランスフォーマーを使ってEventBridgeからの通知を可読しやすい形式に修正する手順を解説します。
設定
以下の流れで設定します。
SNS
初めに、EventBridgeのターゲットとなるSNSトピックを作成します。
- SNSに移動し、「トピックの作成」押下する
- タイプは「スタンダード」、ここでは名前に「TaskStoppedAlert」を入力する
- メソッドは「アドバンスト」、ポリシーに以下を追記し、画面下部の「トピックを作成」を押下する
{ "Sid": "PublishEventsToMyTopic", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:<リージョン名>:<AWSアカウントID>:TaskStoppedAlert" }
- ページ遷移後、「サブスクリプションの作成」を押下する
- プロトコルには「Eメール」、エンドポイントには自身のメールアドレスを入力し「サブスクリプションの作成」を押下する
- 自身のアドレスに届いたメール内のURLを押下し、サブスクリプションを完了させる
EventBridge
EventBridgeからルールを作成します。
ここでは例として、ECSタスクが停止したことを検知するルールとします。
- EventBridgeに移動し「ルールを作成」を押下する
- ここでは名前に「test-input-transformation」を入力し、「次へ」を押下する
- 「イベントパターン」は「カスタムパターン」を選択し、以下JSONを入力し「次へ」を押下する
{ "source": ["aws.ecs"], "detail-type": ["ECS Task State Change"], "detail": { "lastStatus": ["STOPPED"], "stoppedReason": ["Essential container in task exited"] } }
- ターゲットタイプには「AWSのサービス」を選択し、「SNSトピック」を選択する。トピックは「TaskStoppedAlert」を選択し「次へ」を押下する
- タグを設定する場合は設定して「次へ」を押下する
- 設定内容を確認して「ルールの作成」を押下する
以上でルールの作成が完了しました。 まずは入力トランスフォーマーを設定せずにルールが動作し、メールが受信されることを確認します。 次の手順で受信したメール本文のイベントメッセージを使いますので控えておいてください。
入力トランスフォーマー
入力トランスフォーマーを設定し、可読しやすい形式に修正します。
- 先ほど作成したルールを選択し「編集」を押下する
- ステップ3「ターゲットを選択」を押下する
- 追加設定を押下し、プルダウンは「入力トランスフォーマー」を選択し、「入力トランスフォーマーを設定」を押下する
- 「独自のサンプルイベントを入力」を選択し、メールで受信したJSONイベントを貼り付ける
- 「入力パス」欄に取得するパラメーターをJSON形式で記載する。今回は以下パラメーターとする
{ "stoppedReason": "$.detail.stoppedReason", "taskArn": "$.detail.taskArn", "time": "$.time" }
- テンプレート欄には入力トランスフォーマーによる修正後のメール本文を記載し、入力パスの変数を組み込む。設定が完了したら下部の「確認」を押下する
"発生時刻:<time>" "停止理由:<stoppedReason>" "タスクARN:<taskArn>"
- 「次へ」を押下する
- 「ルールの更新」を押下する
動作確認
EventBridgeのルールが動作すると、メール本文が以下のように入力トランスフォーマーで指定した形式に修正されていると思います。
おわりに
今回は、EventBridgeからの通知を可読しやすい形式に修正する手順をご紹介しました。
通知内容の動的な加工(条件分岐による文言の変更や、複数APIからのデータ集約など)が必要な場合はLambdaの使用をオススメしますが、イベントデータの形式変換のみであれば入力トランスフォーマーで十分実装できます。
この記事がどなたかの参考になれば幸いです。