Athena クエリをスケジュールするにはどうすればよいですか?

最終更新日: 2020 年 5 月 21 日

Amazon Athena でクエリをスケジュールするにはどうすればよいですか?

簡単な説明

クエリのスケジュールは、定期的なレポートクエリの実行や定期的な間隔での新しいパーティションのロードなど、多くのシナリオで役立ちます。Athena でクエリをスケジュールする方法は以下のとおりです。

解決方法

Lambda 関数と CloudWatch Events ルールを使用して Athena クエリをスケジュールするには:

1.    Lambda 用の AWS Identity and Access Management (IAM) サービスロールを作成します。次に、Athena、Amazon Simple Storage Service (Amazon S3)、および Amazon CloudWatch Logs へのアクセスを許可するポリシーをアタッチします。たとえば、AmazonAthenaFullAccessCloudWatchLogsFullAccess をロールに追加できます。 AmazonAthenaFullAccess は Athena へのフルアクセスを許可し、Amazon S3 の基本的なアクセス許可を含みます。CloudWatchLogsFullAccess は CloudWatch Logs へのフルアクセスを許可します。

2.    Lambda コンソールを開きます。

3.    [Create function] を選択します。

4.    [一から作成] が選択されていることを確認し、次のオプションを設定します。

[名前] に関数の名前を入力します。
[ランタイム] で、Python オプションのいずれかを選択します。
[ロール] で、[既存のロールを使用する] を選択し、ステップ 1 で作成した IAM ロールを選択します。

5.    [関数を作成] を選択します。

6.    [関数コード] セクションにコードを貼り付けます。次の例では Python 3.7 を使用します。サンプルの以下の値を置き換えます。

default: Athena データベース名
SELECT*FROM default.tb: スケジュールするクエリ
s3://AWSDOC-EXAMPLE-BUCKET/: クエリ出力のための S3 バケット

import time
import boto3

query = 'SELECT * FROM default.tb'
DATABASE = 'default'
output='s3://AWSDOC-EXAMPLE-BUCKET/'

def lambda_handler(event, context):
    query = "SELECT * FROM default.tb"
    client = boto3.client('athena')

    # Execution
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )
    return response
    return

7.    ページの右上隅で、[保存] を選択します。

8.    CloudWatch コンソールを開きます。

9.    ナビゲーションペインで [ルール] を選択し、続いて [ルールの作成] を選択します。CloudWatch Event ルールの作成の詳細については、ステップ 2: ルールを作成するを参照してください。

10.   [イベントソース] セクションで、[スケージュール] を選択し、cron 式を入力します。

11.   ページ右側の [ターゲット] セクションで、[ターゲットの追加] を選択します。

12.   ドロップダウンリストで、[Lambda 関数] を選択します。

13.   [関数] のドロップダウンリストで、Lambda 関数の名前を選択します。

14.   ページの右下隅で、[設定の詳細] を選択します。

15.   CloudWatch Events ルールの [名前] と [説明] を入力し、[ルールの作成] を選択します。

16.   Lambda コンソールを開き、以前に作成した関数を選択します。

17.   [トリガーを追加] を選択し、[CloudWatch Events/EventBridge] を選択します。

18.   [ルール] ドロップダウンリストで、先ほど作成した CloudWatch Events ルールを選択します。

19.   [追加] を選択します。

複数のクエリをスケジュールする場合は、アカウントごとに Athena API への呼び出し数にクォータがあることに注意してください。詳細については、アカウントごとの API 呼び出しクォータを参照してください。