[新機能] Amazon CloudWatch EventsのInput Transformerを試してみた

2017.03.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。

先日のアップデートで、CloudWatch Eventsでターゲットに送信する入力値を変換することができるようになりました。

この機能により、ターゲットに渡す入力値を、目的に合わせてあらかじめ変換しておくことが可能になります。

やってみた

早速試してみました。

今回は、特定のS3バケットにファイルが保存されたことをトリガーに、CloudWatch Eventsを起動してSNSでメール送信してみます。SNSに通知するInputを変換することで、メールの記述をわかりやすく変換してやります。

 

cw-event-it-008

事前準備

S3バケットへオブジェクトがPUTされたことを通知するためには、あらかじめCloudTrailでデータイベントのロギングを有効化しておく必要があります。対象のバケットで必要な操作に対するロギングを有効化しておきましょう。

cw-event-it-001

また、通知先となるSNSのトピック/サブスクリプションを作成しておきます。

イベントルールの作成

続いて、CloudWatch Eventsのルールを作成します。

  • サービス名:S3
  • イベントタイプ:Object Level Operations
  • 特定のオペレーション → PutObject

を指定し、監視対象のバケットを指定します。

cw-event-it-002

次に、ターゲットイベントの設定です。ターゲットにはSNSを指定します。Input Transferが今回追加された設定です。入力パスと入力テンプレートで、変換してターゲットに渡すことができます。

cw-event-it-005

今回は以下のように指定しました。アップロードされたバケットとオブジェクトを変数として入力テンプレートに渡します。

入力パス:

{ 
  "Bucket" : "$.detail.requestParameters.bucketName",
  "Object":"$.detail.requestParameters.key"
}

入力テンプレート:

"S3バケット:<Bucket>に<Object>が保存されました"

あとは適当な名前を設定して保存します。

通知メッセージ

実際に対象バケットにオブジェクトを保存し、通知されるメールを確認します。

cw-event-it-006

いい感じの記述になりました!

これがもし、イベント内容をそのまま通知すると、ものすごく長いJSONが記載されています。プログラムで扱う場合には問題ないかもしれませんが、監視用途でメール通知する場合には、受け取った人がわかりやすい記述の方が良いですね。

まとめ

新たに追加された、CloudWatch EventsのInput Transferを試しました。

もともと、SNSを使ってのメール通知などで手軽に使える便利な機能でしたが、メッセージを変換できるようになったことで、人が直接読む場合にもユーザフレンドリーなメッセージ通知も簡単に実装できるようになりました。

他にも、SQSやLambdaを呼び出す場合にもあらかじめ扱いやすい形式に変換できそうです。