AWS Glue Crawler実行時にテーブルの更新を検知して通知する方法
どーも、データアナリティクス事業本部コンサルティングチームのsutoです。
AWS Glue crawlerの実行してテーブル情報に変更が発生した場合に通知する方法について検証してみました。
2通りの方法
Glue Crawlersの設定を作成するウィザードのなかではそもそもSNSトピックなどに連携する機能はありません。
クローラージョブの実行かつテーブルの更新を確認するには
- CloudWatch LogsでGlueクローラーの実行ログを確認する
- CloudTrailのログからGlueクローラーの実行に関するイベントを確認する
の2通りとなります。
どちらにしてもCloudWatch Logsにログを出力してメトリクスフィルター作成、アラーム作成から通知する仕組みを作る方法となります。
以下、それぞれの方法で検証してみました。
[準備]データとGlueクローラー設定
検証用として確認しやすいように以下のデータを使ってGlueクローラーでテーブルを作成します。
AWS Glueクローラージョブを作成して実行した結果は以下のとおりです。
また、テーブル作成時のそれぞれのCloudWatch Logsの内容は以下のようになっています。
※CloudTrailログをCloudWatch Logsに出力するには、CloudTrailの証跡の画面で事前に有効の設定をしておく必要があります
CloudTrailイベントLog
Glueクローラー実行Log
CloudWatchアラームの通知先であるSNSトピックも準備しておきます。
※上記のとおり検証用Glueテーブル、CloudWatchアラームに連携するSNSトピックについては事前に作成済みであることを前提ととさせていただきますので、本記事ではSNSトピック設定手順は省略します。
Glueクローラージョブのロググループを使う場合の設定
- Glueクローラージョブのロググループを選択して「メトリクスフィルターを作成」を選択します
- パラメータは以下画面のように作成しました
- フィルタパターンは、Glueテーブルの内容に更新があった際に記録される「"INFO : UPDATE"」というキーワードで設定します
- 次に作成したメトリクスフィルターを選択して「アラームを作成」を行います
- 以下画面のようにアラームの作成を行います
メトリクスの設定
アラートの条件
アクションはSNSトピックを設定、それ以外のアクションは設定していません
アラーム名を入力し、次のプレビュー画面でアラームを作成します
CloudTrailロググループを使う場合の設定
- さきほどのGlueクローラーログの場合とやることは一緒です。CloudTrailログのロググループを選択して「メトリクスフィルターを作成」を選択します
- パラメータは以下画面のように作成しました
- CloudTrailの場合、Glueテーブルの内容に更新があった際にeventNameというカラムに「UpdateTable」という記録が出力されます
- よってフィルタパターンは「{$.eventSource = "glue.amazonaws.com" && $.eventName = "UpdateTable*" }」という条件で設定します
- 次に作成したメトリクスフィルターを選択して「アラームを作成」を行います
- 以下画面のようにアラームの作成を行います
メトリクスの設定
アラートの条件
アクションにSNSトピックを設定
アラーム名を入力し、次のプレビュー画面でアラームを作成します
検知できるか検証
2通りのCloudWatchアラームを作成したので、実際にGlueテーブルのソースファイルにカラムを追加してアラームを検知してみます。
S3に置いているファイルを編集します。「add_column」というstring型のカラムを追加してGlueクローラーを実行します
実際に通知先としたメールを確認してみると、どちらのアラームも発生できていることが確認できました。