スキップしてコンテンツを表示

Amazon Athena でクエリをスケジュールする方法を教えてください。

所要時間2分
0

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

簡単な説明

クエリのスケジュールは、多数のユースケースに対応します (例: 定期レポート、一定間隔での新規パーティションの読み込み)。ユースケースに応じて、次のいずれかの方法で Athena でクエリをスケジュールします。

  • AWS Lambda 関数を作成してクエリをスケジュールした後、Amazon EventBridge ルールを作成して Lambda 関数をスケジュールします。
  • AWS Step Functions を使用して Athena を使用する ETL パイプラインを作成します。
  • Linux マシンでは、crontab を使用してクエリをスケジュールします。
  • AWS Glue Python シェルジョブを使用します。

解決策

Lambda 関数と EventBridge ルールを使用してスケジュールを行い、Athena クエリを実行する

Lambda 関数と EventBridge ルールを使用して Athena クエリをスケジュールします。次の手順を実行します。

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

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

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

  4. [最初から作成] が選択されていることを確認した後、次のオプションを構成します。
    [名前] に、関数の名前を入力します。
    [ランタイム] で、Python オプションのいずれかを選択します。
    [ロール] で **[既存のロールを使用する] **を選択し、ステップ 1 で作成した IAM ロールを選択します。

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

  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. [デプロイ] を選択します。

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

  9. ナビゲーションペインで [ルール] を選択し、[ルールを作成] を選択します。

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

  11. [パターンの定義] で [スケジュール] を選択します。

  12. [Cron 式] を選択し、目的の cron 式を入力します。

  13. **[イベントバスを選択] **で [AWS のデフォルトイベントバス] を選択します。

  14. [ターゲットの選択] セクションで次の手順を実行します。
    [ターゲット] のドロップダウンリストから [Lambda 関数] を選択します。
    [関数] のドロップダウンリストから Lambda 関数名を選択します。

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

注: アカウントごとに、Athena API への呼び出し回数に制限が適用されます。複数のクエリをスケジュールする場合は、クォータ内に収まるよう注意してください。詳細については、「アカウントあたりの API コールのクォータ」を参照してください。

Step Functions を使用して ETL パイプラインを作成する

Step Functions を使用して ETL パイプラインを作成し、Athena を含める場合は、その Step Functions を使用して Athena クエリをスケジュールします。

Linux マシンで crontab を使用する

Linux マシンを使用する場合は、crontab を使用して Athena クエリをスケジュールします。

AWS Glue Python シェルジョブを使用する

AWS Glue Python シェルジョブを使用し、Athena boto3 API を使用する Athena クエリを実行します。次に、AWS Glue ジョブのスケジュールを定義します。

関連情報

チュートリアル: AWS Lambda 関数用の EventBridge がスケジュールしたルールを作成する

Amazon EventBridge でスケジュールに従って実行するルールを作成する

AWS公式更新しました 2年前