쿼리 예약 - Amazon Redshift

쿼리 예약

중요

이제 Amazon Redshift 쿼리 에디터 v2에서 쿼리 예약이 지원됩니다. 쿼리 에디터 v2를 사용하는 것이 좋습니다. 자세한 내용은 쿼리 에디터 v2를 사용한 쿼리 예약 단원을 참조하십시오.

Amazon Redshift 콘솔에서 쿼리 편집기를 사용하여 SQL 문 실행 일정을 생성할 수 있습니다. 비즈니스 요구 사항에 맞는 시간 간격으로 SQL 문 실행 일정을 생성할 수 있습니다. 예약된 쿼리를 실행할 시간이 되면 Amazon EventBridge가 쿼리를 시작합니다.

SQL 문 실행 일정을 생성하려면
  1. 쿼리 편집기 사용하기의 설명에 따라 콘솔 및 쿼리 편집기를 엽니다. 이 쿼리 편집기는 프로비저닝된 클러스터에서만 사용할 수 있습니다.

  2. [예약(Schedule)]을 선택하여 SQL 문의 실행 일정을 생성할 수 있습니다.

    일정을 정의할 때 다음 정보를 제공합니다.

    • 쿼리를 실행하는 데 필요한 권한을 수임하는 데 사용되는 IAM 역할입니다. 자세한 내용은 쿼리 예약을 위한 권한 설정 단원을 참조하십시오.

    • 클러스터 액세스 권한을 부여하기 위한 AWS Secrets Manager 또는 임시 자격 증명의 인증 값입니다. 자세한 내용은 예약된 쿼리 인증 단원을 참조하십시오.

    • 예약된 쿼리의 이름과 실행할 단일 SQL 문입니다.

    • 일정 빈도 및 반복 옵션 또는 cron 형식 값입니다.

    • 필요에 따라 Amazon SNS 알림을 사용하여 예약된 쿼리를 모니터링할 수 있습니다. 쿼리가 실행 중이지만 SNS 주제에 게시된 메시지가 표시되지 않는 경우 Amazon EventBridge User GuideMy rule is being triggered but I don't see any messages published into my Amazon SNS topic을 참조하세요.

Amazon Redshift 콘솔을 사용하여 예약된 쿼리를 관리하고 업데이트할 수도 있습니다. 콘솔 버전에 따라 예약된 쿼리가 다음 위치에 나열될 수 있습니다.

  • 클러스터 세부 정보 페이지의 [일정(Schedules)] 탭.

  • 쿼리 편집기의 [예약된 쿼리(Scheduled queries)] 탭.

이러한 위치 중 하나에서 [일정 이름(Schedule name)]을 선택하면 예약된 쿼리의 정의를 보고 편집할 수 있습니다.

Amazon Redshift 콘솔에서 쿼리를 예약할 수 있는 권한 설정

쿼리를 예약하려면 일정을 정의하는 AWS Identity and Access Management(IAM) 사용자 및 일정과 연결된 IAM 역할을 다음과 같이 구성해야 합니다.

Amazon Redshift 콘솔에 로그인한 IAM 사용자에 대해 다음을 수행합니다.

  • AmazonEventBridgeFullAccess AWS 관리형 정책을 IAM 역할에 연결합니다.

  • 예약된 SQL 문을 정의할 때 지정하는 IAM 역할의 sts:AssumeRole 권한이 있는 정책을 연결합니다.

    다음 예에서는 지정된 IAM 역할을 수임하는 정책을 보여줍니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeIAMRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account-id:role/sql-statement-iam-role" } ] }

스케줄러가 쿼리를 실행할 수 있도록 지정하는 IAM 역할에 대해 다음을 수행합니다.

  • 이 IAM 역할이 EventBridge 서비스 주체(events.amazonaws.com)를 지정하는지 확인합니다. 다음은 신뢰 관계의 예입니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    EventBridge 이벤트에 대한 IAM 역할을 생성하는 방법에 대한 자세한 내용은 Amazon EventBridge 스케줄러 사용에 필요한 권한 섹션을 참조하세요.

  • AmazonRedshiftDataFullAccess AWS 관리형 정책을 IAM 역할에 연결합니다.

  • 사용자가 일정 기록을 볼 수 있도록 허용하려면 IAM 역할을 편집하여 sts:AssumeRole 권한을 추가합니다.

다음은 IAM 역할 내 신뢰 정책의 예입니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

예약된 쿼리 인증

쿼리를 예약할 때 쿼리 SQL 실행 시 다음 인증 방법 중 하나를 사용합니다. 각 방법에는 Amazon Redshift 콘솔의 다양한 입력 조합이 필요합니다.

AWS Secrets Manager

이 방법으로 AWS Secrets Manager에 저장되어 있는 secret-arn에 대한 보안 암호 값을 제공합니다. 이 보안 암호에는 데이터베이스에 연결하기 위한 자격 증명이 포함되어 있습니다. 보안 암호는 키 RedshiftDataFullAccess로 태그가 지정되어야 합니다.

최소 권한에 대한 자세한 내용은 AWS Secrets Manager User GuideCreating and Managing Secrets with AWS Secrets Manager를 참조하세요.

임시 보안 인증 정보

이 방법으로 databasedb-user 값을 제공합니다.

AmazonRedshiftDataFullAccess 정책은 redshift_data_api_user라는 데이터베이스 사용자에게 redshift:GetClusterCredentials에 대한 권한을 허용합니다. 다른 데이터베이스 사용자를 사용하여 SQL 문을 실행하려면 redshift:GetClusterCredentials를 허용하는 정책을 IAM 역할에 추가합니다. 다음 예제 정책에서는 데이터베이스 사용자를 awsusermyuser를 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllDbUsers", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:*:*:dbuser:*/awsuser", "arn:aws:redshift:*:*:dbuser:*/myuser" ] } ] }

쿼리가 완료될 때 실행되는 Amazon EventBridge 규칙 생성

쿼리가 완료되면 알림을 보내는 이벤트 규칙을 생성할 수 있습니다. Amazon EventBridge 콘솔을 사용하는 절차를 알아보려면 Amazon EventBridge 사용 설명서에서 이벤트에 응답하는 Amazon EventBridge 규칙 생성을 참조하세요. 이벤트 패턴에 대한 자세한 내용은 Amazon EventBridge 사용 설명서에서 Amazon EventBridge 이벤트 패턴을 참조하세요.

예를 들어 쿼리가 FINISHED될 때 다음 샘플 이벤트가 전송됩니다.

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "Redshift Data Statement Status Change", "source": "aws.redshift-data", "account": "123456789012", "time": "2020-12-22T17:00:00Z", "region": "us-west-1", "resources": [ "arn:aws:redshift:us-east-2:123456789:cluster:t1" ], "detail": { "statementId": "01bdaca2-8967-4e34-ae3f-41d9728d5644", "clusterId": "test-dataapi", "statementName": "awesome query", "state": "FINISHED", "pages": 5, "expireAt": "2020-12-22T18:43:48Z", "principal": "arn:aws:sts::123456789012:assumed-role/any", "queryId": 123456 } }

이벤트 패턴 규칙을 만들어 이벤트를 필터링할 수 있습니다.

{ "source": [ "aws.redshift-data" ], "detail-type": [ "Redshift Data Statement Status Change" ], "detail": { "state": [ "FINISHED" ] } }