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

最終更新日: 2022 年 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 boto3

# Query string to execute
query = 'SELECT * FROM database.tb'

# Database to execute the query against
DATABASE = 'database'

# Output location for query results
output='s3://OUTPUTBUCKET/'

def lambda_handler(event, context):
    # Initiate the Boto3 Client
    client = boto3.client('athena')

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

    # Return response after starting the query execution
    return response

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 コールのクォータを参照してください。