CloudWatch Events を使用した Athena クエリのモニタリング - Amazon Athena

CloudWatch Events を使用した Athena クエリのモニタリング

Amazon Athena と Amazon CloudWatch を使用して、クエリの状態に関するリアルタイムの通知を受け取ることができます。送信したクエリの状態が推移すると、Athena がそのクエリ状態の推移に関する情報が含まれたイベントを CloudWatch Events に発行します。関心のあるイベントのシンプルなルールを作成し、イベントがルールに一致したときに自動化されたアクションが実行されるようにできます。たとえば、クエリが最終状態に達したときに AWS Lambda 関数を呼び出すルールを作成できます。イベントは、ベストエフォートベースで出力されます。

Athena のイベントルールを作成する前に、以下を実行する必要があります。

  • CloudWatch Events のイベント、ルール、およびターゲットをよく理解しておく。詳細については、「Amazon CloudWatch Events とは」を参照してください。ルールの設定方法に関する詳細については、CloudWatch Events の使用開始方法を参照してください。

  • イベントのルールで使用するターゲットを作成する。

注記

Athena では、現在 Athena Query State Change という 1 つのイベントタイプを提供していますが、他のタイプのイベントと詳細が追加する場合があります。イベントの JSON データをプログラムで逆シリアル化する場合は、不明なプロパティが追加されているときにアプリケーションで対応する準備ができていることを確認してください。

Athena イベントの形式

以下は、Amazon Athena イベントの基本的なパターンです。

{ "source":[ "aws.athena" ], "detail-type":[ "Athena Query State Change" ], "detail":{ "currentState":[ "SUCCEEDED" ] } }

Athena Query State Change イベント

以下は、Athena Query State Change イベントの形式です。

{ "version":"0", "id":"abcdef00-1234-5678-9abc-def012345678", "detail-type":"Athena Query State Change", "source":"aws.athena", "account":"123456789012", "time":"2019-10-06T09:30:10Z", "region":"us-east-1", "resources":[ ], "detail":{ "versionId":"0", "currentState":"SUCCEEDED", "previousState":"RUNNING", "statementType":"DDL", "queryExecutionId":"01234567-0123-0123-0123-012345678901", "workgroupName":"primary", "sequenceNumber":"3" } }

出力プロパティ

JSON 出力には、以下のプロパティが含まれます。

プロパティ 説明
versionId 詳細オブジェクトのスキーマのバージョン番号。
currentState イベント発生時のクエリの移行後の状態。
previousState イベント発生時のクエリの移行前の状態。
statementType 実行されたクエリステートメントのタイプ。
queryExecutionId 実行されたクエリの一意の識別子。
workgroupName クエリが実行されたワークグループの名前。
sequenceNumber 実行された単一のクエリが関与する受信イベントの重複排除と順序付けを可能にする単調増加数。同じ状態移行に対して重複するイベントが発行された場合、sequenceNumber 値は同じです。再キューイングがまれに発生するクエリなど、状態移行が複数回発生するクエリの場合は、sequenceNumber を使用して、currentState および previousState 値が同じイベントを順序付けできます。

Example

以下の例は、サブスクライブした Amazon SNS トピックにイベントを発行します。Athena がクエリされると、E メールを受信します。この例は、Amazon SNS トピックが存在し、そのトピックにサブスクライブしていることを前提としています。

Athena イベントを Amazon SNS トピックに発行する

  1. Amazon SNS トピックのターゲットを作成します。以下の例にあるように、CloudWatch Events サービスプリンシパル に Amazon SNS トピックに発行するための events.amazonaws.com 許可を付与します。

    { "Effect":"Allow", "Principal":{ "Service":"events.amazonaws.com" }, "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-1:111111111111:your-sns-topic" }
  2. 以下の例にあるように、AWS CLI events put-rule コマンドを使用して Athena イベントのルールを作成します。

    aws events put-rule --name {ruleName} --event-pattern '{"source": ["aws.athena"]}'
  3. 以下の例にあるように、AWS CLI events put-targets コマンドを使用して Amazon SNS トピックのターゲットをルールにアタッチします。

    aws events put-targets --rule {ruleName} --targets Id=1,Arn=arn:aws:sns:us-east-1:111111111111:your-sns-topic
  4. Athena をクエリして、呼び出されるターゲットを確認します。Amazon SNS トピックから対応する E メールを受信します。