Athenaのクエリが失敗したら通知を飛ばしてみる
データアナリティクス事業本部のおざわ(じ)です。
今回は、Athenaのワークグループ、EventBridge、SNSを使用してAthenaのクエリが失敗したらメールで通知してみます。本記事で利用しているサービスに関しては最後に参考リンクを載せていますので、そちらも合わせてご確認いただければと思います。
想定ケース
今回の通知の仕組みですが、使いどころとしては以下のような状況を想定しています。
Athenaの操作に不慣れなAさんとメンターのBさんがいます。
メンターのBさんとしては、Aさんにある程度は自由に環境を触ってもらって覚えてほしい。ただし、大量データのスキャン等コストがかかるものは防ぎつつ、エラーが発生した際は、エラー内容を確認して状況を把握しておきたい。
こんな場合にAthenaでワークグループを作成してスキャンできるデータ量を制御できます。またEventBridgeとSNSを仕込んでおくと、クエリが失敗した場合にメンターのBさんにエラー内容が通知されます。
それではさっそく環境を準備します。
0. データの準備
今回はテスト用にdata.govからダウンロードさせてもらったモンゴメリー州の犯罪統計データを使用しました。
CSVをデータカタログに登録する方法についてはこちらのブログ記事をご確認ください。
余談ですが、昔住んでいた学芸大学駅に、いつも素敵なジャズが流れているモンゴメリーというおいしいラーメン屋さんがありました。また食べにいきたいです。
1. SNSトピックとサブスクリプションの作成
SNSを使ってメール送信の準備をします。
「トピックの作成」からトピックを作成します。
続いて「サブスクリプションの作成」から「エンドポイント」に通知を送信するメールアドレスを指定します。
このステップを行うとSNSから「エンドポイント」に入力したアドレスに確認メールが送信されます。 メール本文にあるConfirmリンクをクリックすると登録完了です。
2. Athena ワークグループを作成
次にAthenaでワークグループを作成します。
ワークグループの詳細につきましてはこちらのブログを参考にしてください。
以下の画面からワークグループでスキャン可能なデータ量を制限できます。
今回は最小制限の10MBに設定します。
また、使用状況についてもアラートを受け取りたいので、こちらも設定してみます。
SNSトピックには先程作成したトピックを選択してください。
3. EventBridgeの準備
Athenaが発火するイベントとSNSを紐付けるためにEventBridgeで設定を行います。
3. 1. ルールの作成
AWSサービスを利用しますのでイベントバスには「default」を選択してください
名前を設定して「ルールタイプ」には「イベントパターンを持つルール」を選択します。
サンプルイベントで目的のイベントを選択するとイベントパターンの設定例を出力してくれます。
3.2. イベントパターンの設定
クエリが失敗したときに通知を行うため、detailのcurrentStateにFAILEDを指定します。ワークグループに設定したデータ容量の制限にかかった場合、クエリがキャンセルされますのでcurrentStateにCANCELEDも追加しておきます。対象のワークグループは先程のワークグループのみにしたいので、workgroupNameと作成したグループを追加してください。
{ "source": ["aws.athena"], "detail-type": ["Athena Query State Change"], "detail": { "currentState": ["FAILED","CANCELED"], "workgroupName": ["test-workgroup"] } }
「パターンを編集」をクリックしてJSONを貼り付けます。
3.3. ターゲットを選択
ターゲットに「SNSトピック」を選択すると、さきほど作成したトピックも一覧に表示されると思いますので、トピックを選択してください。
4.クエリを失敗させてみます
以上で準備が整いましたのでクエリを失敗させてみます。
メールにも画面と同じ内容が記載されていました。
"errorMessage":"line 1:8: Column 'hoge' cannot be resolved"
5. データ量の制限
こちらも無事にメールが届きました。
今回の設定は、CANCELEDになったら通知を飛ばしますので、利用者が自分でクエリをキャンセルした場合など、データ量の制限にかかってない場合でも通知は届きます。
参考リンク
Athena
Athenaのワークグループに関してはこちらをご参照ください。