

# EventBridge を使用して Athena クエリ イベントをモニタリングする
<a name="athena-events"></a>

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

Athena のイベントルールを作成する前に、以下を実行する必要があります。
+ EventBridge のイベント、ルール、ターゲットに精通しておいてください。詳細については、「[Amazon EventBridge とは?](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)」を参照してください。ルールの設定方法に関する詳細については、「[Amazon EventBridge の開始方法](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)」を参照してください。
+ イベントのルールで使用するターゲットを作成する。

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

## Athena イベントの形式
<a name="athena-events-pattern"></a>

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

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

## Athena Query State Change イベント
<a name="athena-events-athena-query-state-change"></a>

次の例は、`currentState` の値が `SUCCEEDED` の 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"
    }
}
```

次の例は、`currentState` の値が `FAILED` の Athena Query State Change イベントを示しています。`athenaError` ブロックは、`currentState` が `FAILED` の場合のみ表示されます。`errorCategory`、および `errorType` の値についての詳細は、「[Athena エラーカタログ](error-reference.md)」を参照してください。

```
{
    "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":{
        "athenaError": {
            "errorCategory": 2.0, //Value depends on nature of exception
            "errorType": 1306.0, //Type depends on nature of exception
            "errorMessage": "Amazon S3 bucket not found", //Message depends on nature of exception
            "retryable":false //Retryable value depends on nature of exception
        },
        "versionId":"0",
        "currentState": "FAILED",
        "previousState": "RUNNING",
        "statementType":"DML",
        "queryExecutionId":"01234567-0123-0123-0123-012345678901",
        "workgroupName":"primary",
        "sequenceNumber":"3"
    }
}
```

### 出力プロパティ
<a name="athena-events-query-state-change-output-properties"></a>

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


****  

| プロパティ | 説明 | 
| --- | --- | 
| athenaError | currentState が FAILED の場合にのみ表示されます。エラーカテゴリ、エラータイプ、エラーメッセージ、およびエラーの原因となったアクションを再試行できるかどうかなど、発生したエラーに関する情報が含まれます。これらのフィールドそれぞれの値は、エラーの性質によって異なります。errorCategory、および errorType の値についての詳細は、「[Athena エラーカタログ](error-reference.md)」を参照してください。 | 
| versionId | 詳細オブジェクトのスキーマのバージョン番号。 | 
| currentState | イベント発生時のクエリの移行後の状態。 | 
| previousState | イベント発生時のクエリの移行前の状態。 | 
| statementType | 実行されたクエリステートメントのタイプ。 | 
| queryExecutionId | 実行されたクエリの一意の識別子。 | 
| workgroupName | クエリが実行されたワークグループの名前。 | 
| sequenceNumber | 実行された単一のクエリが関与する受信イベントの重複排除と順序付けを可能にする単調増加数。同じ状態移行に対して重複するイベントが発行された場合、sequenceNumber 値は同じです。再キューイングがまれに発生するクエリなど、状態移行が複数回発生するクエリの場合は、sequenceNumber を使用して、currentState および previousState 値が同じイベントを順序付けできます。 | 

## 例
<a name="athena-events-examples"></a>

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

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

1. Amazon SNS トピックのターゲットを作成します。次の例のように、EventBridge イベントが 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"
   }
   ```

1. 以下の例にあるように、AWS CLI `events put-rule` コマンドを使用して Athena イベントのルールを作成します。

   ```
   aws events put-rule --name {ruleName} --event-pattern '{"source": ["aws.athena"]}'
   ```

1. 以下の例にあるように、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
   ```

1. Athena をクエリして、呼び出されるターゲットを確認します。Amazon SNS トピックから対応する E メールを受信します。

## Amazon Athena で AWS User Notifications を使用する
<a name="monitoring-user-notifications"></a>

[AWS User Notifications](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html) を使用して配信チャネルを設定して、Amazon Athena イベントに関する通知を受け取ることができます。指定したルールにイベントが一致すると、通知を受け取ります。イベントの通知は、Eメール、[チャットアプリケーション内の Amazon Q Developer](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html)のチャット通知、[AWS Console Mobile Application](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/what-is-consolemobileapp.html)のプッシュ通知などの複数のチャネルで受け取ることができます。また、[コンソール通知センター](https://console.aws.amazon.com/notifications/)の通知を確認することもできます。User Notifications は集約をサポートしているため、特定のイベント中に受け取る通知の数を減らすことができます。

詳細については、「[https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html)」を参照してください。