쿼리 에디터 v2를 사용한 쿼리 예약 - Amazon Redshift

쿼리 에디터 v2를 사용한 쿼리 예약

Amazon Redshift 쿼리 에디터 v2를 사용하여 SQL 문의 실행 일정을 생성할 수 있습니다. 비즈니스 요구 사항에 맞는 시간 간격으로 SQL 문의 실행 일정을 생성합니다. 예약된 쿼리를 실행할 시간이 되면 Amazon EventBridge에서 쿼리가 시작되고 Amazon Redshift Data API가 사용됩니다.

SQL 문 실행 일정을 생성하려면
  1. 편집기 Editor 뷰에서 Schedule 일정을 선택하여 SQL 문의 실행 일정을 생성할 수 있습니다.

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

    • 쿼리를 실행하는 데 필요한 권한을 맡는 IAM 역할. 이 IAM 역할은 클러스터 또는 작업 그룹에도 연결됩니다.

    • 클러스터 또는 작업 그룹 액세스 권한을 부여하기 위한 AWS Secrets Manager 또는 임시 보안 인증 정보의 인증 값. 이러한 인증 방법은 데이터 API에서 지원됩니다. 자세한 내용은 예약된 쿼리 인증 단원을 참조하십시오.

    • 데이터베이스가 있는 클러스터 또는 작업 그룹.

    • 쿼리할 데이터가 있는 데이터베이스의 이름.

    • 예약된 쿼리의 이름과 설명입니다. 쿼리 편집기 v2는 사용자가 제공한 예약된 쿼리 이름 앞에 "QS2-"를 접두사로 붙입니다. 쿼리 에디터 v1은 예약된 쿼리 이름 앞에 'QS-'를 붙입니다.

    • 일정에 따라 실행할 SQL 문.

    • 일정을 정의하는 일정 빈도 및 반복 옵션 또는 cron 형식 값. 자세한 내용을 알아보려면 Amazon CloudWatch Events 사용 설명서Cron 표현식을 참조하세요.

    • 필요에 따라 표준 Amazon SNS 알림을 사용하여 예약된 쿼리를 모니터링할 수 있습니다. Amazon SNS 알림에 제공한 이메일 주소를 확인해야 할 수 있습니다. 이메일에서 Amazon SNS 알림을 받을 이메일 주소를 확인할 수 있는 링크를 확인합니다. 자세한 정보는 Amazon Simple Notification Service 개발자 안내서이메일 알림을 참조하세요. 쿼리가 실행 중이지만 SNS 주제에 게시된 메시지가 표시되지 않는 경우 Amazon EventBridge 사용 설명서내 규칙이 실행되지만 내 Amazon SNS 주제에 어떤 메시지도 게시되지 않음을 참조하세요.

  3. 쿼리 예약을 선택하여 일정을 저장 및 활성화하고 예약된 쿼리 뷰의 쿼리 목록에 해당 일정을 추가합니다.

예약된 쿼리 Scheduled queries 뷰에는 클러스터 및 작업 그룹에 대한 모든 예약된 쿼리가 나열됩니다. 이 뷰에서는 쿼리 예약 세부 정보를 표시하고, 일정을 활성화 또는 비활성화하고, 일정을 편집하고, 예약된 쿼리를 삭제할 수 있습니다. 쿼리 세부 정보를 볼 때 일정과 함께 쿼리를 실행한 기록도 볼 수 있습니다.

참고

쿼리 예약 실행은 24시간 동안만 일정 기록 목록에서 확인할 수 있습니다. 일정에 따라 실행되는 쿼리는 쿼리 편집기 v2의 쿼리 기록 뷰에 나타나지 않습니다.

쿼리 예약을 위한 권한 설정

쿼리를 예약하려면 일정을 정의하는 AWS Identity and Access Management(IAM) 사용자 및 일정과 연결된 IAM 역할에 Amazon EventBridge와 Amazon Redshift Data API를 사용할 수 있는 IAM 권한을 구성해야 합니다. 예약된 쿼리에서 이메일을 받으려면 선택적으로 지정하는 Amazon SNS 알림도 구성해야 합니다.

다음은 AWS 관리형 정책을 사용하여 권한을 제공하는 작업에 대한 설명입니다. 하지만 환경에 따라 허용되는 권한의 범위를 좁힐 수 있습니다.

쿼리 에디터 v2에 로그인한 IAM 사용자의 경우 IAM 콘솔(https://console.aws.amazon.com/iam/)을 사용하여 IAM 사용자를 편집합니다.

  • Amazon Redshift 및 쿼리 에디터 v2 작업을 실행할 수 있는 권한 외에도 IAM 사용자에게 해당 AmazonEventBridgeFullAccessAmazonRedshiftDataFullAccess AWS 관리형 정책을 연결합니다.

  • 또는 역할에 권한을 할당하고 사용자에게 역할을 할당합니다.

    예약된 문을 정의할 때 지정하는 IAM 역할의 리소스 ARN에 대한 sts:AssumeRole 권한을 허용하는 정책을 연결합니다. 역할 수임에 대한 자세한 내용은 IAM 사용 설명서사용자에게 역할 전환 권한 부여를 참조하세요.

    다음 예에서는 123456789012 계정에서 IAM 역할 myRedshiftRole을 수임하는 권한 정책을 보여줍니다. IAM 역할 myRedshiftRole은 예약된 쿼리가 실행되는 클러스터 또는 작업 그룹에 연결된 IAM 역할이기도 합니다.

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

    쿼리를 예약하는 데 사용된 IAM 역할의 신뢰 정책을 업데이트하여 IAM 사용자가 쿼리를 맡을 수 있도록 합니다.

    { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myIAMusername" }, "Action": "sts:AssumeRole" } ] }

예약된 쿼리 실행을 허용하도록 지정하는 IAM 역할의 경우 IAM 콘솔(https://console.aws.amazon.com/iam/)을 사용하여 IAM 역할을 편집합니다.

  • AmazonRedshiftDataFullAccessAmazonEventBridgeFullAccess AWS 관리형 정책을 IAM 역할에 연결합니다. AmazonRedshiftDataFullAccess 관리형 정책은 RedshiftDataFullAccess 키로 태그가 지정된 Redshift Serverless 작업 그룹에 대해서만 redshift-serverless:GetCredentials 권한을 허용합니다.

예약된 쿼리 인증

쿼리를 예약할 때 SQL 실행 시 다음 인증 방법 중 하나를 사용합니다. 각 방법마다 쿼리 에디터 v2에서 서로 다른 입력 조합이 필요합니다. 이러한 인증 방법은 SQL 문을 실행하는 데 사용되는 데이터 API에서 지원됩니다.

쿼리를 실행하는 데 사용되는 데이터베이스 사용자 또는 역할에는 필요한 데이터베이스 권한이 있어야 합니다. 예를 들어 mytable 테이블에 IAMR:MyRedshiftQEv2Scheduler 권한을 부여하려면 다음 SQL 명령을 실행합니다.

GRANT all ON TABLE mytable TO "IAMR:MyRedshiftQEv2Scheduler";

클러스터 또는 작업 그룹의 데이터베이스 사용자 목록을 보려면 시스템 뷰 PG_USER_INFO를 쿼리하세요.

참고

쿼리를 예약하는 모든 Redshift Serverless 작업 그룹에는 RedshiftDataFullAccess 키로 태그가 지정됩니다. 자세한 내용은 Amazon Redshift Data API에 대한 액세스 권한 부여 단원을 참조하십시오.

작업 그룹에 태그를 지정하는 대신 redshift-serverless:GetCredentials를 허용하는 인라인 정책을 IAM 역할(일정과 함께 지정됨)에 추가할 수 있습니다. 예:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllServerlessWorkgroups", "Effect": "Allow", "Action": "redshift-serverless:GetCredentials", "Resource": [ "arn:aws:redshift-serverless:*:*:workgroup/*" ] } ] }
AWS Secrets Manager

이 방법으로 AWS Secrets Manager에 저장되어 있는 secret-arn에 대한 보안 암호 값을 제공합니다. 이 보안 암호에는 데이터베이스에 연결하기 위한 자격 증명이 포함되어 있습니다. 클러스터 또는 작업 그룹을 생성할 때 적절한 보안 인증을 사용하여 암호를 생성했을 수 있습니다. 보안 암호는 키 RedshiftDataFullAccess로 태그가 지정되어야 합니다. 태그 키가 아직 없는 경우 AWS Secrets Manager 콘솔을 사용하여 추가합니다. 보안 암호 생성에 대한 정보는 데이터베이스 연결 자격 증명을 위한 보안 암호 생성 섹션을 참조하세요.

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

임시 보안 인증 정보

이 방법을 사용하는 경우 클러스터의 데이터베이스에 연결할 때 데이터베이스 이름데이터베이스 사용자 값을 입력합니다. 작업 그룹의 데이터베이스에 연결할 때 데이터베이스 이름만 입력해야 합니다.

클러스터에 연결할 때, 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" ] } ] }

쿼리 예약 기록을 볼 수 있는 권한 설정

사용자가 쿼리 예약 기록을 볼 수 있도록 허용하려면 IAM 역할(예약과 함께 지정됨) 신뢰 관계를 편집하여 권한을 추가합니다.

다음은 IAM 사용자 myIAMusername이 쿼리 예약 기록을 볼 수 있도록 허용하는 IAM 역할 내 신뢰 정책의 예입니다. IAM 사용자에게 sts:AssumeRole 권한을 허용하는 대신 IAM 역할에 이 권한을 허용하도록 선택할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "redshift-serverless.amazonaws.com" ] }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myIAMusername" }, "Action": "sts:AssumeRole" } ] }

예약된 쿼리 모니터링

이메일 알림을 보내도록 지정한 Amazon SNS 주의 경우 쿼리 편집기 v2에서 SNS 알림 섹션으로 이동하여 모니터링을 켜고 SNS 주제 생성으로 주제를 생성하여 Amazon SNS 주제를 생성합니다. 쿼리 편집기 v2가 Amazon SNS 주제를 생성하고 Amazon EventBridge에 대한 액세스 정책에 서비스 주체를 추가합니다. 다음은 Amazon SNS 주제에 생성된 액세스 정책 예입니다. 이 예에서는 AWS 리전 us-west-2, AWS 계정 123456789012, Amazon SNS 주제 select-version-pdx-testunload가 사용되었습니다.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-west-2:123456789012:select-version-pdx-testunload" } ] }

예약된 쿼리가 실행되면 Amazon SNS에서 AWS 알림 이메일을 보냅니다. 다음 예는 Amazon SNS 알림 주제 may25a-SNS를 사용하여 AWS 계정 123456789012 내 AWS 리전 eu-north-1에서 실행된 예약된 쿼리 QS2-may25a에 대해 myemail@example.com으로 보낸 이메일을 보여줍니다.

{"version":"0","id":"8e4323ec-5258-7138-181b-91290e30ff9b","detail-type":"Scheduled Event","source":"aws.events","account":"123456789012","time":"2023-05-25T15:22:00Z", "region":"eu-north-1","resources":["arn:aws:events:eu-north-1:123456789012:rule/QS2-may25a"],"detail":{}} -- If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe: https://sns.eu-north-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:eu-north-1:123456789012:may25a-SNS:0c1a3d05-39c2-4507-bc3d-47250513d7b0&Endpoint=myemail@example.com Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support

쿼리 예약 설정 문제 해결

쿼리 예약에 문제가 있는 경우 다음을 고려하세요.

쿼리가 실행되지 않음

일정에 사용된 IAM 역할에 임시 클러스터 보안 인증을 가져올 수 있는 권한이 있는지 확인합니다. 프로비저닝된 클러스터에 대한 권한은 redshift:GetClusterCredentialsWithIAM입니다. Redshift Serverless 작업 그룹에 대한 권한은 redshift-serverless:GetCredentials입니다.

예약된 기록이 표시되지 않음

AWS 콘솔에 로그인하는 데 사용된 IAM 사용자 또는 IAM 역할이 쿼리 예약에 사용된 IAM 역할의 신뢰 정책에 추가되지 않았습니다.

AWS Secrets Manager을 사용하여 예약된 쿼리를 연결할 때 암호에 RedshiftDataFullAccess 키 태그가 지정되었는지 확인합니다.

예약된 쿼리가 AWS Secrets Manager 연결을 사용하는 경우 쿼리를 예약하는 데 사용된 IAM 역할에는 역할에 연결된 관리형 정책 SecretsManagerReadWrite에 상응하는 정책이 있어야 합니다.

쿼리 기록 상태가 Failed입니다.

쿼리가 실패한 이유에 대한 자세한 내용은 SYS_QUERY_HISTORY 시스템 뷰를 참조하세요. 반적인 문제는 쿼리를 실행하는 데 사용된 데이터베이스 사용자 또는 역할에 SQL을 실행하는 데 필요한 권한이 없을 수 있다는 것입니다. 자세한 내용은 예약된 쿼리 인증 단원을 참조하십시오.

다음 SQL은 SYS_QUERY_HISTORY 뷰를 쿼리하여 실패한 쿼리를 반환합니다.

SELECT user_id, query_id, transaction_id, session_id, database_name, query_type, status, error_message, query_text FROM sys_query_history WHERE status = 'failed';

실패한 특정 예약 쿼리에 대한 세부 정보를 찾으려면 AWS CloudShell로 예약된 쿼리에 대한 세부 정보 찾기를 참조하세요.

AWS CloudShell로 예약된 쿼리에 대한 세부 정보 찾기

AWS CloudShell을 사용하여 예약 쿼리에 대한 세부 정보를 찾을 수 있습니다. 다음 절차에 표시된 AWS CLI 명령을 실행하려면 적절한 권한이 있어야 합니다.

예약 쿼리 결과를 보려면 다음을 수행하세요.
  1. AWS 콘솔에서 AWS CloudShell 명령 프롬프트를 엽니다. AWS CloudShell에 대한 자세한 내용은 AWS CloudShell 사용 설명서에서 AWS CloudShell이란 무엇인가요를 참조하세요.

  2. 예약된 쿼리의 IAM 역할을 가정합니다. 역할을 가정하려면 쿼리 편집기 v2에서 예약된 쿼리와 연결된 IAM 역할을 찾아 AWS CloudShell의 AWS CLI 명령에서 사용합니다. 예를 들어 역할 scheduler의 경우, 예약된 쿼리에서 사용되는 역할을 가정하기 위해 AWS STS 명령을 입력합니다.

    aws sts assume-role —role-arn "arn:aws:iam::123456789012:role/scheduler" —role-session-name "scheduler-test"

    반환되는 보안 인증은 다음과 유사합니다.

    "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY...", "Expiration": "2023-08-18T18:19:44+00:00" }, "AssumedRoleUser": { "AssumedRoleId": "AROA35B2NH6WBTP7ONL4E:scheduler-test", "Arn": "arn:aws:sts::123456789012:assumed-role/scheduler/scheduler-test" } }
  3. IAM 역할을 가정하여 표시된 보안 인증을 사용하여 AWS CLI에서 환경 변수를 생성합니다.  이러한 토큰은 만료 시간 전에 사용해야 합니다. 예를 들어 AWS CloudShell에 다음을 입력합니다.

    export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY...
  4. 실패한 쿼리의 오류를 보려면 AWS CLI 명령을 실행하여 문을 설명합니다. SQL 문 ID는 쿼리 편집기 v2에서 예약된 쿼리의 일정 기록 섹션에 표시된 ID에서 가져옵니다.

    aws redshift-data describe-statement —id 130d2620-05d2-439c-b7cf-815d9767f513

    이 예에서 예약된 SQL select * from users limit 100은 users 테이블이 존재하지 않는다는 SQL 오류를 발생시킵니다.

    { "CreatedAt": "2023-08-18T17:39:15.563000+00:00", "Duration": -1, "Error": "ERROR: relation \"users\" does not exist", "HasResultSet": false, "Id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "QueryString": "select * from users limit 100\n—RequestID=a1b2c3d4-5678-90ab-cdef-EXAMPLE22222; TraceID=1-633c5642-4039308d03f3a0ba53dbdf6f", "RedshiftPid": 1073766651, "RedshiftQueryId": 0, "ResultRows": -1, "ResultSize": -1, "Status": "FAILED", "UpdatedAt": "2023-08-18T17:39:16.116000+00:00", "WorkgroupName": "default" }

쿼리 예약 데모

쿼리 예약 데모를 보려면 다음 동영상을 시청하세요.