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.    함수 생성을 선택합니다.

4.    [새로 작성]이 선택되어 있는지 확인한 후 다음 옵션을 구성합니다.

[Name(이름)]에 함수 이름을 입력합니다.
[런타임]에서 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.    Amazon EventBridge 콘솔을 엽니다.

9.    탐색 창에서 [규칙]을 선택하고 [규칙 생성]을 선택합니다.

10.    규칙의 이름과 설명을 입력합니다.

11.    [패턴 정의]에서 [예약]을 선택합니다.

12.    [Cron 표현식]을 선택한 다음 cron expression을 입력합니다.

13.    [이벤트 버스 선택]에서 [AWS 기본 이벤트 버스]를 선택합니다.

14.    [대상 선택] 섹션에서 다음을 수행합니다.

[대상]에서 드롭다운 목록 중 [Lambda 함수]를 선택합니다. [함수]에서 드롭다운 목록 중 Lambda 함수의 이름을 선택합니다.

15.    [생성]을 선택합니다.

여러 쿼리를 예약하는 경우 계정당 Athena API에 대한 호출 수에 대한 할당량이 있다는 점에 유의하세요. 자세한 내용은 계정당 API 호출 할당량을 참조하세요.