Amazon S3 버킷에서 자동으로 파일을 복사하기 위해 S3 이벤트 통합 만들기
참고
자동 복사용 미리 보기 릴리스가 종료되었습니다. 따라서 미리 보기 클러스터는 미리 보기 기간 종료 30일 후에 자동으로 제거됩니다. 자동 복사를 계속 사용하려면 다른 Amazon Redshift 클러스터에서 기존 자동 복사 작업을 다시 만드는 것이 좋습니다. 미리 보기 클러스터를 최신 Amazon Redshift 버전으로 업그레이드하는 것은 지원되지 않습니다.
자동 복사 작업을 사용하여 Amazon S3에 저장된 파일에서 Amazon Redshift 테이블로 데이터를 로드할 수 있습니다. Amazon Redshift는 COPY 명령에 지정된 경로에 새 Amazon S3 파일이 추가되는 시기를 감지합니다. 그러면 외부 데이터 수집 파이프라인을 만들지 않고도 COPY 명령이 자동으로 실행됩니다. Amazon Redshift는 로드된 파일을 추적합니다. Amazon Redshift는 COPY 명령당 함께 배치되는 파일 수를 결정합니다. 시스템 뷰에서 결과 COPY 명령을 볼 수 있습니다.
자동 COPY JOB을 만드는 첫 번째 단계는 S3 이벤트 통합을 만드는 것입니다. Amazon S3 소스 버킷에 새 파일이 나타나면 Amazon Redshift는 COPY 명령을 사용하여 데이터베이스로의 파일 로드를 관리합니다.
S3 이벤트 통합을 만들기 위한 사전 조건
s3 이벤트 통합을 설정하려면 다음 사전 조건이 충족되었는지 확인합니다.
Amazon S3 버킷에 여러 Amazon S3 권한을 허용하는 버킷 정책이 있어야 합니다. 예를 들어 다음 예시 정책은
us-east-1
에서 호스팅되는 리소스 버킷amzn-s3-demo-bucket
에 대한 권한을 허용합니다. Amazon S3 버킷과 통합이 모두 동일한 AWS 리전에 있습니다.{ "Version": "2012-10-17", "Statement": [ { "Sid": "Auto-Copy-Policy-01", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "s3:GetBucketNotification", "s3:PutBucketNotification", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:redshift:us-east-1
:123456789012
:integration:*", "aws:SourceAccount": "123456789012
" } } } ] }대상 Amazon Redshift 프로비저닝된 클러스터 또는 Redshift Serverless 네임스페이스에 버킷에 대한 권한이 있어야 합니다. 클러스터 또는 서버리스 네임스페이스와 연결된 IAM 역할에 적절한 권한을 허용하는 IAM 정책이 있는지 확인합니다. 이 정책은 버킷 리소스에 대한
s3:GetObject
(예:
) 버킷 리소스에 대한amzn-s3-demo-bucket
s3:ListBucket
및 해당 콘텐츠(예:
)를 모두 허용해야 합니다.amzn-s3-demo-bucket
/*{ "Version": "2012-10-17", "Statement": [ { "Sid": "AutoCopyReadId", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }역할에 대한 신뢰 관계가 있는 IAM 역할에 정책을 추가하는 방법은 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
대상 데이터 웨어하우스가 프로비저닝된 클러스터인 경우 Amazon Redshift 콘솔에서 클러스터 세부 정보의 클러스터 권한 탭을 사용하여 IAM 역할을 프로비저닝된 클러스터에 연결할 수 있습니다. 프로비저닝된 클러스터에 역할을 연결하는 방법에 대한 자세한 내용은 Amazon Redshift 관리 안내서의 IAM 역할을 클러스터와 연결을 참조하세요.
대상 데이터 웨어하우스가 Redshift Serverless인 경우 Redshift Serverless 콘솔에서 네임스페이스 세부 정보의 보안 및 암호화 탭을 사용하여 IAM 역할을 서버리스 네임스페이스에 연결할 수 있습니다. 역할을 서버리스 네임스페이스에 연결하는 방법에 대한 자세한 내용은 Amazon Redshift 관리 안내서의 Amazon Redshift Serverless에 권한 부여를 참조하세요.
Amazon Redshift 데이터 웨어하우스에는 Amazon S3 버킷을 허용하는 리소스 정책도 있어야 합니다. Amazon Redshift 콘솔을 사용하는 경우 s3 이벤트 통합을 만들 때 Amazon Redshift는이 정책을 Amazon Redshift 데이터 웨어하우스에 추가할 수 있도록 수정 옵션을 제공합니다. 직접 리소스 정책을 업데이트하려면 put-resource-policy AWS CLI 명령을 사용할 수 있습니다. 예를 들어 Amazon S3 버킷과의 S3 이벤트 통합을 위해 Amazon Redshift 프로비저닝된 클러스터에 리소스 정책을 연결하려면 다음과 유사한 AWS CLI 명령을 실행합니다. 다음 예시에서는 사용자 계정
123456789012
에 대해us-east-1
AWS 리전에 프로비저닝된 클러스터 네임스페이스에 대한 정책을 보여줍니다. 버킷의 이름은amzn-s3-demo-bucket
입니다.aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift:
us-east-1
:123456789012
:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433"여기서
rs-rp.json
에 다음 사항이 포함됩니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "redshift:AuthorizeInboundIntegration", "Resource": "arn:aws:redshift:
us-east-1
:123456789012
:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket
" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012
:role/myRedshiftRole" }, "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift:us-east-1
:123456789012
:namespace/cc4ffe56-ad2c-4fd1-a5a2-f29124a56433", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket
" } } } ] }Amazon S3 버킷과 S3 이벤트 통합을 위해 Redshift Serverless 네임스페이스에 리소스 정책을 연결하려면 다음과 유사한 AWS CLI 명령을 실행합니다. 다음 예시에서는 사용자 계정
123456789012
의us-east-1
에 있는 서버리스 네임스페이스에 AWS 리전 대한 정책을 보여줍니다. 버킷의 이름은amzn-s3-demo-bucket
입니다.aws redshift put-resource-policy \ --policy file://rs-rp.json \ --resource-arn "arn:aws:redshift-serverless:
us-east-1
:123456789012
:namespace/namespace-1"여기서
rs-rp.json
에 다음 사항이 포함됩니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "redshift:AuthorizeInboundIntegration", "Resource": "arn:aws:redshift-serverless:
us-east-1
:123456789012
:namespace/namespace-1", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket
" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/myUser" }, "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift-serverless:us-east-1
:123456789012
:namespace/namespace-1", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket
" } } } ] }
S3 이벤트 통합 만들기
복사 작업을 설정하려면 먼저 S3 이벤트 통합을 정의합니다.
그런 다음 Amazon Redshift는 연결된 소스 및 대상, 상태, 연결된 자동 복사 작업의 상태에 대한 정보와 함께 S3 이벤트 통합을 만듭니다. S3 이벤트 통합을 선택하고 세부 정보를 표시하도록 통합을 선택하여 Amazon Redshift 콘솔에서 S3 이벤트 통합에 대한 정보를 볼 수 있습니다. 통합은 내 계정 내에서 만들어진 것과 다른 계정에서 만들어진 것으로 구분됩니다. 내 계정 내 목록에는 소스와 대상이 동일한 계정에 있는 통합이 표시됩니다. 다른 계정에서 목록에는 다른 계정에서 소스를 소유한 통합이 표시됩니다.
S3 이벤트 통합을 삭제하면 해당 COPY JOB 상태가 1
(활성)에서 0
(비활성/보류)로 변경됩니다. 그러나 해당 COPY JOB은 자동으로 삭제되지 않습니다. 나중에 이름이 같은 COPY JOB을 생성하려고 하면 충돌이 발생할 수 있습니다.
COPY 작업 만들기 및 모니터링
통합이 만들어진 후 만든 통합에 대한 S3 이벤트 통합 세부 정보 페이지에서 자동 복사 작업 만들기를 선택하여 통합에 대한 자동 복사 작업을 만들 수 있는 Amazon Redshift Query Editor V2로 이동합니다. Amazon Redshift는 COPY JOB CREATE 문에서 FROM 절의 버킷을 S3 이벤트 통합에 사용되는 버킷과 매칭합니다. Amazon Redshift Query Editor V2에 대한 자세한 내용은 Amazon Redshift 관리 안내서의 Amazon Redshift Query Editor V2를 사용하여 데이터베이스 쿼리를 참조하세요. 예를 들어 Query Editor V2에서 다음 COPY 명령을 실행하여 Amazon S3 버킷 s3://amzn-s3-demo-bucket/staging-folder
을 Amazon S3 이벤트 통합에 매칭하는 자동 COPY JOB을 만듭니다.
COPY public.target_table FROM 's3://amzn-s3-demo-bucket/staging-folder' IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' JOB CREATE my_copy_job_name AUTO ON;
COPY 작업을 한 번 정의합니다. 향후 실행에도 동일한 파라미터가 사용됩니다.
COPY JOB을 정의하고 관리하려면 권한이 있어야 합니다. COPY JOB에 대한 권한 부여 및 취소에 대한 자세한 내용은 GRANT 및 REVOKE 섹션을 참조하세요. COPY JOB에 대한 범위 지정 권한 부여 및 취소에 대한 자세한 내용은 범위가 지정된 권한 부여 및 범위가 지정된 권한 취소 섹션을 참조하세요.
CREATE, LIST, SHOW, DROP, ALTER 및 RUN 작업에 대한 옵션을 사용하여 로드 작업을 관리합니다. 자세한 내용은 COPY JOB 섹션을 참조하세요.
COPY JOB 상태 및 진행률을 확인하기 위해 시스템 뷰를 쿼리할 수 있습니다. 뷰는 다음과 같이 제공됩니다.
SYS_COPY_JOB - 현재 정의된 각 COPY JOB에 대한 행이 포함됩니다.
SYS_COPY_JOB_DETAIL - 각 COPY JOB에 대해 보류 중인 파일, 오류 파일 및 수집된 파일에 대한 세부 정보를 포함합니다.
SYS_COPY_JOB_INFO - COPY 작업에 대해 로깅된 메시지를 포함합니다.
SYS_LOAD_HISTORY - COPY 명령의 세부 정보가 포함됩니다.
SYS_LOAD_ERROR_DETAIL - COPY 명령 오류의 세부 정보가 포함됩니다.
SVV_COPY_JOB_INTEGRATIONS - S3 이벤트 통합에 대한 세부 정보를 포함합니다.
STL_LOAD_ERRORS - COPY 명령의 오류가 포함됩니다.
STL_LOAD_COMMITS - COPY 명령 데이터 로드 문제를 해결하는 데 사용되는 정보가 포함됩니다.
S3 이벤트 통합 오류 문제 해결에 대한 자세한 내용은 S3 이벤트 통합 및 COPY JOB 오류 문제 해결 섹션을 참조하세요.
COPY JOB에 의해 로드된 파일 목록을 가져오려면 먼저 <job_id>
를 대체하고 다음 SQL을 실행하세요.
SELECT job_id, job_name, data_source, copy_query, filename, status, curtime FROM sys_copy_job copyjob JOIN stl_load_commits loadcommit ON copyjob.job_id = loadcommit.copy_job_id WHERE job_id =
<job_id>
;
자동 복사를 위한 S3 이벤트 통합을 만들 때 고려 사항
자동 복사를 사용할 때는 다음을 고려하세요.
AWS 계정에서 각 클러스터 또는 작업 그룹에 대해 최대 200개의 COPY JOB을 만들 수 있습니다.
각 Amazon Redshift 대상에 대해 최대 50개의 S3 이벤트 통합을 만들 수 있습니다.
버킷 이름에 마침표(.)가 있는 소스 Amazon S3 버킷과 S3 이벤트 통합을 만들 수 없습니다.
동일한 소스와 대상 간에 하나의 S3 이벤트 통합만 생성할 수 있습니다. 즉, Amazon S3 버킷과 Amazon Redshift 데이터 웨어하우스 간에는 한 번에 하나의 Amazon S3 이벤트 통합만 있을 수 있습니다.
소스 Amazon S3 버킷에 정의된 이벤트 유형
S3_OBJECT_CREATED
에 대한 기존 이벤트 알림은 있을 수 없습니다. 그러나 S3 이벤트 통합이 생성된 후 더 좁은 범위의 접두사/접미사를 사용하여 Amazon S3 버킷 이벤트 알림을 업데이트할 수 있습니다. 이렇게 하면 다른 대상에 대한 다른 접두사/접미사에S3_OBJECT_CREATED
를 구성하여 S3 이벤트 통합과의 충돌을 방지할 수도 있습니다. 자동 복사가 예상대로 실행되지 않는 문제가 발생하는 경우 AWS Support에 문의할 때 해당 기간 내 S3 버킷에 대한s3:PutBucketNotificationConfiguration
작업의 AWS CloudTrail 로그를 준비합니다.