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

最終更新日: 2021 年 12 月 20 日

Amazon Athena でクエリをスケジュールしたいと考えています。

簡単な説明

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

解決方法

Lambda 関数と EventBridge ルールを使用して 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.    [Create function (関数を作成)] を選択します。

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.    [Deploy] を選択します。

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

9.    ナビゲーションペインで [Rules] (ルール) を選択し、続いて [Create rule] (ルールを作成) を選択します。

10.    ルールの名前と説明を入力します。

11.    [Define pattern] (パターンを定義) で、[Schedule] (スケジュール) を選択します。

12.    [Cron expression] (Cron 式) を選択し、cron 式を入力します。

13.    [Select event bus] (イベントバスを選択) で、[AWS default event bus] (AWS デフォルトイベントバス) を選択します。

14.    [Select Targets] (ターゲットを選択) セクションで、次の操作を実行します。

[Target] (ターゲット) で、ドロップダウンリストから [Lambda function] (Lambda 関数) を選択します。[Function] (関数) で、ドロップダウンリストから Lambda 関数の名前を選択します。

15.    [Create] (作成) を選択します。

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