目次
はじめに
こんにちは、テクニカルサポートの甫立です。
すっかり暑くなってるので川とか海とかの画像を見て気持ちだけでも猛暑に抗っている今日このごろです。
今回はAmazon EventBridgeの機能のひとつ、入力トランスフォーマーを使っていつもPersonal Helth Dashboardからのメンテナンス通知をもっと見やすくカスタマイズしていきたいと思います。
AWSから届くインスタンスのメンテナンス通知が英語の長文で届くのを日本語で見たい情報だけ確認できるようカスタマイズしたいと思う方にオススメです。
入力トランスフォーマーとは
入力トランスフォーマーはAmazon EventBridgeのサービスの1つです。(派生元ともいえるCloud Watchイベントにも同じサービスはあります。)
AWSでリソースに対して何らかの操作を行うと、JSON形式のイベントが発行されます。
(以下はEC2インスタンスが停止したというステータスチェンジのサンプルイベントの例)
{
"id":"7bf73129-1428-4cd3-a780-95db273d1602",
"detail-type":"EC2 Instance State-change Notification",
"source":"aws.ec2",
"account":"123456789012",
"time":"2015-11-11T21:29:54Z",
"region":"us-east-1",
"resources":[
"arn:aws:ec2:us-east-1:123456789012:instance/ i-1234567890abcdef0"
],
"detail":{
"instance-id":" i-1234567890abcdef0",
"state":"stopped"
}
}
Amazon EventBridgeは任意のイベントが発行されたのをトリガーに他のリソースにメッセージを送信するといった設定ができます。
入力トランスフォーマーはAmazon EventBridgeで取得したイベントを通知先のターゲットに対して送信する前に通知文をカスタマイズできるサービスです。
どのようにカスタマイズするのかを上のサンプルイベントを例に説明します。
-
キーを指定してバリューを変数に代入。
サンプルイベントを見てもわかる通りJSON形式は「"キー":{"バリュー"}」といった書式になっているのがわかると思います。
ここからインデントをもとにキーを指定してバリューの値を変数に代入します。
{"state" : "$.detail.state", "instance" : "$.detail. instance-id"}
上記を入力パスといいます。
入力パスの書式は「{"変数":"キーのパス"}」となっています。 -
通知文の中に1で指定した変数を組み込む。
1で作成した変数を通知文に組み込みます。
"EC2 インスタンス
の状態が に変更されました" 上記を入力テンプレートといいます。
ここまで設定ができたら、サンプルイベントが発行されたのをトリガーとして設定した場合にAmazon EventBridgeにて以下のようにイベント文がカスタムされます。
"EC2 インスタンス i-1234567890abcdef0 の状態が stopped に変更されました"
参考にした公式チュートリアルはこちら
今回はAmazon EventBridgeとAWS SNSを連携させてPersonal Health Dashboardからのメンテナンス通知を見やすくカスタマイズしてメールで送信されるように設定させたいと思います。
なお、SNSトピックなどはあらかじめ作っている前提なので、なければあらかじめ作成する必要があります。
Amazon EventBridgeルールの作成・入力トランスフォーマーの設定
Amazon EventBridgeイベントルールのページに移動し、[ルールを作成]をクリックします。
以下のように入力していきましょう。
-
[名前]は自由に入力
-
[イベントパターン]に●
-
[カスタムパターン]に●
-
[イベントパターン]には以下を入力しましょう。
{ "detail-type": ["AWS Health Event"] }
入力したら[保存]をクリック
上記はトリガーとなるキーとそのバリューを表します。
なお、この設定はインプットフォーマーのテストのための設定です。
後ほどテストイベントを発行するのに[aws.health]は指定できないのでこのようなイベントパターンにしました。
[サービスごとの事前の定義パターン]に●を入れて[Health]を選択しても正しく設定できます。
-
[ターゲット]はメールを受け取りたいのでSNSトピックを選択
-
[トピック]は事前に用意したものを選択
-
[▼入力の設定]をクリックして展開
-
[入力トランスフォーマー]に●を入れて以下のように入力します。
- 上段のボックス
ここには入力パスを入れていきます。{ "time":"$.detail.startTime", "service":"$.detail.service", "event":"$.detail.eventTypeCode" }
- 下段のボックス
ここには入力テンプレートを入れていきます。"AWSにてメンテナンス通知が発行されました。" "時間:
- 上段のボックス
上記が入力できたら[作成]をクリックしていきましょう。
検証
デフォルトのイベントバスにテストイベントを送信して、実際に設定したイベントでトリガーしてカスタムしたメッセージがメールで届くのか確認してみましょう。
イベントバスから[default]のイベントバス名をクリックします。
右上から[イベントの送信]をクリックします。
以下のようにそれぞれ記入します。
-
[イベントソース]は自由に入力
ここがテストイベントの[source]の部分にあたります。 -
[詳細タイプ]は以下を入力
AWS Health Event
ここがテストイベントの[detail-type]にあたります。
今回はルールの作成でこちらをトリガーとして設定しているので、ここの記述が合わないとメールが届かないので注意です。 -
[イベントの詳細]には以下を入力
{ "eventArn": "arn:aws:health:ap-southeast-2::event/AWS_ELASTICLOADBALANCING_API_ISSUE_90353408594353980", "service": "ELASTICLOADBALANCING", "eventTypeCode": "AWS_ELASTICLOADBALANCING_API_ISSUE", "eventTypeCategory": "issue", "startTime": "Sat, 04 Jun 2016 05:01:10 GMT", "endTime": "Sat, 04 Jun 2016 05:30:57 GMT", "eventDescription": [{ "language": "en_US", "latestDescription": "A description of the event will be provided here" }] }
ここがテストイベントの[detail]内の内容となります。
ここまで記述できたら[送信]をクリックしましょう。
AWS SNSで登録しているメールアドレスに以下のような内容のメールが届いていたら成功です。
"AWSにてメンテナンス通知が発行されました。"
"時間: Sat, 04 Jun 2016 05:01:10 GMT"
"対象サービス: ELASTICLOADBALANCING"
"イベントタイプ: AWS_ELASTICLOADBALANCING_API_ISSUE"
最後に
CloudWatch eventsとEventBridgeのコントロールパネルみると結構変わっててびっくりしたので、触ってみました。
他のサービスからの通知も入力トランスフォーマーは使えるので便利に使っていきたいと思います。
しばらくバリバリの新人、甫立です。
クラウドベリージャム:プロフィールページ