Amazon S3 버킷에서 자동으로 파일을 복사하기 위해 S3 이벤트 통합 만들기 - Amazon Redshift

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 명령을 실행합니다. 다음 예시에서는 사용자 계정 123456789012us-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 console
Amazon Redshift 콘솔에서 Amazon S3 이벤트 통합을 만드는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/redshiftv2/에서 Amazon Redshift 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 S3 이벤트 통합을 선택합니다.

  3. Amazon S3 이벤트 통합 만들기를 선택하여 마법사를 열어 자동 복사에 사용할 S3 이벤트 통합을 만듭니다. 소스 Amazon S3 버킷과 대상 Amazon Redshift 데이터 웨어하우스는 동일한 AWS 리전에 있어야 합니다. 통합을 만드는 단계를 진행할 때 다음 정보를 지정합니다.

    • 통합 이름 - 현재 AWS 리전에서 AWS 계정이 소유한 모든 통합의 고유 식별자입니다.

    • 설명 - 나중에 참조할 수 있도록 Amazon S3 이벤트 통합을 설명하는 텍스트입니다.

    • 소스 S3 버킷 - 현재 AWS 계정 및 AWS 리전에 있는 Amazon S3 버킷이며 Amazon Redshift로 데이터를 수집하는 소스입니다.

    • Amazon Redshift 데이터 웨어하우스 - 통합으로부터 데이터를 수신하는 대상 Amazon Redshift 프로비저닝된 클러스터 또는 Redshift Serverless 작업 그룹입니다.

      대상 Amazon Redshift가 동일한 계정에 있는 경우 대상을 선택할 수 있습니다. 대상이 다른 계정에 있는 경우 Amazon Redshift 데이터 웨어하우스 ARN을 지정합니다. 대상에는 승인된 위탁자 및 통합 소스가 포함된 리소스 정책이 있어야 합니다. 대상에 올바른 리소스 정책이 없고 대상이 동일한 계정에 있는 경우 수정 옵션을 선택하여 통합 생성 프로세스 중에 리소스 정책을 자동으로 적용할 수 있습니다. 대상이 다른 AWS 계정에 있는 경우 Amazon Redshift 웨어하우스에서 리소스 정책을 수동으로 적용해야 합니다.

  4. 최대 50개의 태그 와 선택적 입력 - 통합에 대한 추가 메타데이터를 제공합니다.

  5. S3 이벤트 통합 만들기를 선택할 수 있는 검토 페이지가 표시됩니다.

AWS CLI

AWS CLI를 사용하여 Amazon S3 이벤트 통합을 만들려면 다음 옵션과 함께 create-integration 명령을 사용합니다.

  • integration-name - 통합 이름을 지정합니다.

  • source-arn - Amazon S3 소스 버킷의 ARN을 지정합니다.

  • target-arn - Amazon Redshift 프로비저닝 클러스터 또는 Redshift Serverless 작업 그룹 대상의 네임스페이스 ARN을 지정합니다.

다음 예제에서는 통합 이름, 소스 ARN 및 대상 ARN을 제공하여 통합을 생성합니다. 통합은 암호화되지 않습니다.

aws redshift create-integration \ --integration-name s3-integration \ --source-arn arn:aws:s3:us-east-1::s3-example-bucket \ --target-arn arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 { "IntegrationArn": "arn:aws:redshift:us-east-1:123456789012:integration:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "IntegrationName": "s3-integration", "SourceArn": "arn:aws:s3:::s3-example-bucket", "SourceType": "s3-event-notifications", "TargetArn": "arn:aws:redshift:us-east-1:123456789012:namespace:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Status": "creating", "Errors": [], "CreateTime": "2024-10-09T19:08:52.758000+00:00", "Tags": [] }

다음 AWS CLI 명령을 사용하여 S3 이벤트 통합을 관리할 수도 있습니다.

  • delete-integration - 통합 ARN을 지정하여 S3 이벤트 통합을 삭제합니다.

  • modify-integration - 통합 ARN을 지정하여 S3 이벤트 통합의 이름 또는 설명(또는 둘 다)을 변경합니다.

  • describe-integrations - 통합 ARN을 지정하여 S3 이벤트 통합의 속성을 봅니다.

이러한 명령에 대한 자세한 내용은 Amazon Redshift CLI Guide를 참조하세요.

그런 다음 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에 대한 권한 부여 및 취소에 대한 자세한 내용은 GRANTREVOKE 섹션을 참조하세요. 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 로그를 준비합니다.