Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

Amazon EventBridgeからの通知を可読しやすい形式に修正する

はじめに

EventBridgeを使ったアラートを設定した際に、送られてきたメールがJSON形式で読みにくいな、と思った経験はありませんか?
本記事では、入力トランスフォーマーを使ってEventBridgeからの通知を可読しやすい形式に修正する手順を解説します。

設定

以下の流れで設定します。

SNS

初めに、EventBridgeのターゲットとなるSNSトピックを作成します。

  • SNSに移動し、「トピックの作成」押下する sns-01
  • タイプは「スタンダード」、ここでは名前に「TaskStoppedAlert」を入力する sns-02
  • メソッドは「アドバンスト」、ポリシーに以下を追記し、画面下部の「トピックを作成」を押下する
    {
      "Sid": "PublishEventsToMyTopic",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:<リージョン名>:<AWSアカウントID>:TaskStoppedAlert"
    }

sns-03

  • ページ遷移後、「サブスクリプションの作成」を押下する

sns-04

  • プロトコルには「Eメール」、エンドポイントには自身のメールアドレスを入力し「サブスクリプションの作成」を押下する

sns-05

  • 自身のアドレスに届いたメール内のURLを押下し、サブスクリプションを完了させる

EventBridge

EventBridgeからルールを作成します。
ここでは例として、ECSタスクが停止したことを検知するルールとします。

  • EventBridgeに移動し「ルールを作成」を押下する
  • ここでは名前に「test-input-transformation」を入力し、「次へ」を押下する input-transformation-01
  • 「イベントパターン」は「カスタムパターン」を選択し、以下JSONを入力し「次へ」を押下する
{
  "source": ["aws.ecs"],
  "detail-type": ["ECS Task State Change"],
  "detail": {
    "lastStatus": ["STOPPED"],
    "stoppedReason": ["Essential container in task exited"]
  }
}

input-transformation-02 input-transformation-03

  • ターゲットタイプには「AWSのサービス」を選択し、「SNSトピック」を選択する。トピックは「TaskStoppedAlert」を選択し「次へ」を押下する input-transformation-04
  • タグを設定する場合は設定して「次へ」を押下する input-transformation-05
  • 設定内容を確認して「ルールの作成」を押下する input-transformation-06

以上でルールの作成が完了しました。 まずは入力トランスフォーマーを設定せずにルールが動作し、メールが受信されることを確認します。 次の手順で受信したメール本文のイベントメッセージを使いますので控えておいてください。

入力トランスフォーマー

入力トランスフォーマーを設定し、可読しやすい形式に修正します。

  • 先ほど作成したルールを選択し「編集」を押下する input-transformation-07
  • ステップ3「ターゲットを選択」を押下する input-transformation-08
  • 追加設定を押下し、プルダウンは「入力トランスフォーマー」を選択し、「入力トランスフォーマーを設定」を押下する input-transformation-09
  • 「独自のサンプルイベントを入力」を選択し、メールで受信したJSONイベントを貼り付ける input-transformation-10
  • 「入力パス」欄に取得するパラメーターをJSON形式で記載する。今回は以下パラメーターとする
{
  "stoppedReason": "$.detail.stoppedReason",
  "taskArn": "$.detail.taskArn",
  "time": "$.time"
}

input-transformation-11

  • テンプレート欄には入力トランスフォーマーによる修正後のメール本文を記載し、入力パスの変数を組み込む。設定が完了したら下部の「確認」を押下する
"発生時刻:<time>"
"停止理由:<stoppedReason>"
"タスクARN:<taskArn>"

input-transformation-12

  • 「次へ」を押下する

input-transformation-13

  • 「ルールの更新」を押下する

input-transformation-14

動作確認

EventBridgeのルールが動作すると、メール本文が以下のように入力トランスフォーマーで指定した形式に修正されていると思います。 input-transformation-15

おわりに

今回は、EventBridgeからの通知を可読しやすい形式に修正する手順をご紹介しました。
通知内容の動的な加工(条件分岐による文言の変更や、複数APIからのデータ集約など)が必要な場合はLambdaの使用をオススメしますが、イベントデータの形式変換のみであれば入力トランスフォーマーで十分実装できます。
この記事がどなたかの参考になれば幸いです。