Amazon Redshift 클러스터에 대한 쿼리를 예약하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Redshift 클러스터에서 실행할 쿼리를 예약하려고 합니다. 어떻게 해야 합니까?

간략한 설명

쿼리 에디터를 사용하여 프로비저닝된 Amazon Redshift 클러스터에 대한 SQL 쿼리를 실행, 확인, 저장 및 예약할 수 있습니다. 예약된 쿼리는 Amazon EventBridge에서 시작됩니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

쿼리 에디터 권한

쿼리 에디터를 사용하려면 사용자에게 Amazon Redshift에 대한 최소 권한 세트가 있어야 합니다. 클러스터에서 다른 AWS 서비스를 사용하는 경우 사용자에게도 해당 서비스에 대한 권한이 있어야 합니다. AWS Secrets Manager 보안 암호와 AWS Key Management Service(AWS KMS) 키를 예로 들 수 있습니다. 자세한 내용은 Amazon Redshift 콘솔 쿼리 에디터 사용에 필요한 권한을 참조하세요.

AWS Identity and Access Management(IAM) 관리형 정책을 사용하여 IAM 역할을 기반으로 권한을 관리할 수 있습니다. 자세한 내용은 Amazon Redshift에 대한 AWS 관리형(사전 정의된) 정책을 참조하세요.

쿼리를 예약하려면 쿼리와 연결된 IAM 사용자 및 역할에 쿼리 에디터를 관리할 권한이 있어야 합니다. 지침은 Amazon Redshift 콘솔에서 쿼리를 예약할 수 있는 권한 설정을 참조하세요.

AWS Management Console을 사용한 쿼리 예약

AWS Management Console을 사용하여 쿼리를 예약하려면 다음 단계를 따릅니다.

참고:

  • 쿼리 에디터 v1을 사용하여 쿼리를 예약해야 합니다.
  • 이 쿼리 에디터는 프로비저닝된 클러스터에서만 사용할 수 있습니다.

1.    Amazon Redshift 콘솔을 엽니다.

2.    탐색 창에서 **쿼리 에디터(Query editor)**를 선택합니다.

3.    지침에 따라 클러스터의 데이터베이스에 연결합니다.

4.    지침에 따라 SQL 문을 실행하기 위한 일정을 생성합니다.

5.    Amazon Redshift에서 AWS Secrets Manager를 사용하는 경우, 원하는 보안 암호를 선택합니다.

6.    임시 IAM 사용자 보안 인증(temporary IAM user credentials)을 사용하는 경우 클러스터를 선택하고 데이터베이스 및 사용자 이름을 제공합니다. 참고: IAM 사용자가 임시 보안 인증을 사용하려면 GetClusterCredentials 권한이 있어야 합니다.

7.    **저장(Save)**을 선택합니다.

참고: Simple Notification Service(Amazon SNS)를 켠 경우에는 'events.amazonaws.com'에 대해 'sns:Publish' API 작업이 있는지 확인합니다. 확인하려면 다음 문을 추가합니다.

{
  "Sid": "Allow_Publish_Events",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:us-east-1:{ACCOUNT_ID}:{SNS_TOPIC_NAME}"
}

EventBridge에서 SQL 문을 사용하여 쿼리 예약

EventBridge와 Amazon Redshift 데이터 API를 사용하여 SQL 문을 예약할 수 있습니다. 다음 예에서는 5분마다 현재 이벤트를 새로 고치도록 일정을 설정합니다.

1.    다음과 유사한 cron 또는 rate 표현식을 사용하여 'scheduled-refresh-currentEvents'라는 EventBridge 이벤트 규칙을 생성하고 5분마다 실행되도록 예약합니다.

aws events put-rule \
--name scheduled-refresh-currentEvents \
--schedule-expression "cron(0/5 * * * ? *)"

2.    클러스터, 역할 및 AWS Secrets Manager ARN이 포함된 자주 사용하는 텍스트 에디터를 사용하여 refreshCurrentEvents.json이라는 JSON 파일을 생성하고 저장합니다.

{
  "Rule": "scheduled-refresh-currentEvents",
  "EventBusName": "default",
  "Targets": [
    {
      "Id": "scheduled-refresh-currentEvents",
      "Arn": "<Clsuter ARN>",
      "RoleArn": "<Role ARN>",
      "RedshiftDataParameters": {
        "SecretManagerArn": "<Secrets Manager ARN>",
        "Database": "<Database Name>",
        "Sql": "REFRESH MATERIALIZED VIEW currentEvents;",
        "StatementName": "scheduled-refresh-currentEvents",
        "WithEvent": true
      }
    }
  ]
}

3.    저장한 JSON 파일을 사용하여 이벤트 대상을 생성합니다.

aws events put-targets --cli-input-json file://refreshCurrentEvents.json

4.    대상을 제거하고 규칙을 삭제하려면 다음 명령을 실행합니다.

aws events remove-targets --rule scheduled-refresh-currentEvents --ids scheduled-refresh-currentEvents
aws events delete-rule --name scheduled-refresh-currentEvents

SQL 상태 및 결과 보기

쿼리 상태와 결과를 보려면 다음 단계를 따릅니다.

1.    Amazon Redshift 콘솔을 엽니다.

2.    탐색 창에서 **쿼리 에디터(Query editor)**를 선택한 다음 **예약된 쿼리(Scheduled queries)**를 선택합니다.

3.    쿼리 이름을 선택합니다.

4.    **일정 기록(Schedule history)**에서 ID를 기록해 둡니다. 7단계에서 이 ID가 필요합니다.

5.    쿼리 결과를 검색하려면 다음과 비슷한 AWS CLI 명령 assume-role을 사용하여 쿼리 예약에 사용되는 IAM 역할을 수임합니다.

aws sts assume-role --role-arn "<Role ARN>" --role-session-name AWSCLI-Session

출력은 액세스 키 ID, 비밀 액세스 키 및 세션 토큰을 반환합니다.

6.    다음 내보내기 명령을 사용하여 환경 변수를 구성합니다.

export AWS_ACCESS_KEY_ID=<RoleAccessKeyID>
export AWS_SECRET_ACCESS_KEY=<RoleSecretKey>
export AWS_SESSION_TOKEN=<RoleSessionToken>

7.    다음과 비슷한 AWS CLI 명령 redshift-data를 사용하여 결과를 검색합니다.

aws redshift-data get-statement-result --id <ID> --region <Region>

관련 정보

Amazon Redshift 쿼리 에디터에 연결할 수 없는 이유는 무엇입니까?

Amazon Redshift 데이터 API를 사용하여 Amazon Redshift 클러스터와 상호작용

일정에 따라 실행되는 Amazon EventBridge 규칙 생성

AWS 공식
AWS 공식업데이트됨 일 년 전