Amazon S3를 AWS Database Migration Service의 대상으로 사용 - AWS Database Migration Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon S3를 AWS Database Migration Service의 대상으로 사용

지원되는 데이터베이스 소스에서 AWS DMS를 사용하여 Amazon S3에 데이터를 마이그레이션할 수 있습니다. AWS DMS 작업에서 Amazon S3를 대상으로 사용하는 경우, 전체 로드와 변경 데이터 캡처(CDC) 데이터는 기본적으로 쉼표로 구분된 값(.csv) 형식으로 작성됩니다. 보다 간소화된 스토리지 및 보다 빠른 쿼리 옵션을 위해 데이터를 Apache Parquet(.parquet) 형식에 작성할 수도 있습니다.

AWS DMS는 증분 16진수 카운터를 사용하여 전체 로드 중에 생성된 파일의 이름을 지정합니다(예: .csv 파일의 경우 LOAD00001.csv, LOAD00002..., LOAD00009, LOAD0000A 등). AWS DMS는 타임스탬프를 사용하여 CDC 파일의 이름을 지정합니다(예: 20141029-1134010000.csv). 레코드가 포함된 각 소스 테이블에서 AWS DMS는 지정된 대상 폴더 아래에 폴더를 생성합니다(소스 테이블이 비어 있지 않은 경우). AWS DMS는 모든 전체 로드 및 CDC 파일을 지정된 Amazon S3 버킷에 씁니다. MaxFileSize 엔드포인트 설정을 사용하여 AWS DMS가 생성하는 파일의 크기를 제어할 수 있습니다.

파라미터 bucketFolder에는 S3 버킷에 업로드되기 전에 .csv 또는 .parquet 파일이 저장되는 위치가 포함되어 있습니다. .csv 파일의 경우, 테이블 데이터는 S3 버킷에 다음 형식으로 저장되며 전체 로드 파일과 함께 표시됩니다.

database_schema_name/table_name/LOAD00000001.csv database_schema_name/table_name/LOAD00000002.csv ... database_schema_name/table_name/LOAD00000009.csv database_schema_name/table_name/LOAD0000000A.csv database_schema_name/table_name/LOAD0000000B.csv ...database_schema_name/table_name/LOAD0000000F.csv database_schema_name/table_name/LOAD00000010.csv ...

추가 연결 속성을 사용하여 열 구분 기호, 행 구분 기호 등 여러 파라미터를 지정할 수 있습니다. 추가 연결 속성에 관한 자세한 내용은 이 섹션의 마지막에 나오는 Amazon S3를 AWS DMS의 대상으로 사용 시 엔드포인트 설정을 참조하십시오.

다음과 같이 ExpectedBucketOwner Amazon S3 엔드포인트 설정을 사용하여 버킷 소유자를 지정하고 스나이핑을 방지할 수 있습니다. 그런 다음, 연결을 테스트하거나 마이그레이션을 수행하도록 요청하면 S3는 지정된 파라미터와 비교하여 버킷 소유자의 계정 ID를 확인합니다.

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

CDC 작업을 이용해 데이터 변경을 복제하기 위해 AWS DMS를 사용하는 경우, .csv 또는 .parquet 출력 파일의 첫 번째 열은 다음 .csv 파일이 보여 주는 것처럼 행 데이터가 어떻게 변경되었는지를 나타냅니다.

I,101,Smith,Bob,4-Jun-14,New York U,101,Smith,Bob,8-Oct-15,Los Angeles U,101,Smith,Bob,13-Mar-17,Dallas D,101,Smith,Bob,13-Mar-17,Dallas

이 예의 경우, 소스 데이터베이스에 EMPLOYEE 테이블이 있다고 가정합니다. AWS DMS는 다음 이벤트에 응답하여 데이터를 .csv 또는 .parquet 파일에 작성합니다.

  • 새 직원(Bob Smith, 직원 ID 101)이 2014년 6월 4일에 뉴욕 지사에 입사했습니다. .csv 또는 .parquet 파일에서 첫 번째 열의 I는 새 행이 소스 데이터베이스의 EMPLOYEE 테이블에 삽입(INSERT)되었음을 나타냅니다.

  • 2015년 10월 8일에 Bob은 LA 지사로 전근갑니다. .csv 또는 .parquet 파일에서 U는 Bob의 새 지사 위치를 반영하여 EMPLOYEE 테이블의 해당 행이 업데이트(UPDATE)되었음을 나타냅니다. 이 줄 뒷부분에는 UPDATE 이후에 EMPLOYEE 테이블에서 이 행이 어떻게 표시되는지가 반영됩니다.

  • 2017년 3월 13일에 Bob은 Dallas 지사로 다시 전근갑니다. .csv 또는 .parquet 파일에서 U는 이 행이 다시 업데이트(UPDATE)되었음을 나타냅니다. 이 줄 뒷부분에는 UPDATE 이후에 EMPLOYEE 테이블에서 이 행이 어떻게 표시되는지가 반영됩니다.

  • Bob은 Dallas에서 얼마간 근무한 후 퇴사합니다. .csv 또는 .parquet 파일에서 D는 소스 테이블에서 이 행이 삭제(DELETE)되었음을 나타냅니다. 이 줄의 나머지에는 삭제 전에 EMPLOYEE 테이블에서 이 행이 어떻게 표시되었는지가 반영됩니다.

CDC의 경우, AWS DMS는 기본적으로 트랜잭션 순서에 관계없이 각 데이터베이스 테이블의 행 변경 내용을 저장합니다. 트랜잭션 순서에 따라 행 변경 내용을 CDC 파일에 저장하려면 S3 엔드포인트 설정을 사용하여 이 경로는 물론, CDC 트랜잭션 파일을 S3 대상에 저장할 폴더 경로도 지정해야 합니다. 자세한 내용은 S3 대상의 트랜잭션 순서를 포함한 변경 데이터 캡처(CDC). 섹션을 참조하세요.

데이터 복제 작업 중에 Amazon S3 대상에 대한 쓰기 빈도를 제어하기 위해 cdcMaxBatchIntervalcdcMinFileSize 추가 연결 속성을 구성할 수 있습니다. 따라서 추가 오버헤드 작업 없이 데이터를 분석할 때 성능이 향상될 수 있습니다. 자세한 내용은 Amazon S3를 AWS DMS의 대상으로 사용 시 엔드포인트 설정 단원을 참조하십시오.

Amazon S3를 대상으로 사용하기 위한 사전 조건

Amazon S3를 대상으로 사용하기 전에 다음 사항이 참인지 확인하십시오.

  • 대상으로 사용 중인 S3 버킷이 데이터 마이그레이션에 사용 중인 DMS 복제 인스턴스와 동일한 AWS 리전에 있습니다.

  • 마이그레이션에 사용하는 AWS 계정에는 대상으로 사용 중인 S3 버킷에 대한 쓰기 및 삭제 액세스 권한이 있는 IAM 역할이 있습니다.

  • 이 역할에는 태그 지정 액세스 권한이 있으므로 대상 버킷에 작성되는 S3 객체에 태그를 지정할 수 있습니다.

  • IAM 역할에는 DMS(dms.amazonaws.com)가 신뢰할 수 있는 엔터티로 추가되었습니다.

이 계정의 액세스 권한을 설정하려면 마이그레이션 작업 생성에 사용되는 사용자 계정에 할당된 역할에 다음 권한 집합이 있어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::buckettest2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buckettest2" ] } ] }

S3를 대상으로 하는 검증을 사용하기 위한 사전 요구 사항은 S3 대상 검증 사전 조건를 참조하십시오.

Amazon S3를 대상으로 사용할 때 적용되는 제한 사항

Amazon S3를 대상으로 사용할 때 적용되는 제한 사항은 다음과 같습니다.

  • S3의 버전 관리를 활성화하지 마십시오. S3 버전 관리가 필요한 경우, 수명 주기 정책을 사용하여 이전 버전을 적극적으로 삭제하세요. 그렇지 않으면 S3 list-object 직접 호출 시간 초과로 인해 엔드포인트 테스트 연결 실패가 발생할 수 있습니다. S3 버킷의 수명 주기 정책을 생성하려면 스토리지 수명 주기 관리를 참조하세요. S3 객체의 버전을 삭제하려면 버전 관리 활성화 버킷에서 객체 버전 삭제를 참조하세요.

  • VPC 지원(게이트웨이 VPC) S3 버킷은 버전 3.4.7 및 이후 버전에서 지원됩니다.

  • 변경 데이터 캡처(CDC)에는 테이블 자르기(Truncate Table), 테이블 삭제(Drop Table), 테이블 생성(Create Table), 테이블 이름 바꾸기(Rename Table), 열 추가(Add Column), 열 삭제(Drop Column), 열 이름 바꾸기(Rename Column), 열 데이터 유형 변경(Change Column Data Type)과 같은 데이터 정의 언어(DDL) 명령이 지원됩니다. 소스 데이터베이스에서 열을 추가, 삭제 또는 변경할 때 대상 S3 버킷에는 ALTER 문이 기록되지 않으며 AWS DMS는 이전에 생성된 레코드를 새 구조에 맞게 변경하지 않습니다. 변경 후 AWS DMS는 새 테이블 구조를 사용하여 새 레코드를 생성합니다.

    참고

    DDL 잘라내기(truncate DDL) 작업을 하면 S3 버킷에서 모든 파일 및 해당 테이블 폴더가 제거됩니다. 작업 설정을 사용하여 해당 동작을 비활성화하고 변경 데이터 캡처(CDC) 중에 DMS가 DDL 동작을 처리하는 방식을 구성할 수 있습니다. 자세한 내용은 변경 처리 DDL을 다루기 위한 작업 설정 섹션을 참조하세요.

  • 전체 LOB 모드는 지원되지 않습니다.

  • 전체 로드 중에 소스 테이블의 구조 변경은 지원되지 않습니다. 전체 로드 중에 데이터 변경은 지원됩니다.

  • 동일한 소스 테이블에서 동일한 대상 S3 엔드포인트 버킷으로 데이터를 복제하는 작업을 여러 번 수행하면 동일한 파일에 해당 작업을 쓰게 됩니다. 동일한 테이블의 데이터 소스인 경우 서로 다른 대상 엔드포인트(버킷)를 지정하는 것이 좋습니다.

  • BatchApply는 S3 엔드포인트에는 지원되지 않습니다. S3 대상에 대해 Batch Apply(예: BatchApplyEnabled 대상 메타데이터 작업 설정)를 사용하면 데이터 손실이 발생할 수 있습니다.

  • DatePartitionEnabled 또는 addColumnNamePreserveTransactions 또는 CdcPath와 함께 사용할 수 없습니다.

  • AWS DMS는 변환 규칙을 사용하여 여러 소스 테이블의 이름을 동일한 대상 폴더로 바꾸는 것을 지원하지 않습니다.

  • 전체 로드 단계에서 소스 테이블에 많은 양의 쓰기가 있는 경우 DMS는 S3 버킷이나 캐시된 변경 사항에 중복 레코드를 쓸 수 있습니다.

  • TargetTablePrepModeDO_NOTHING인 작업을 구성하면 전체 로드 단계에서 작업이 갑자기 중지되었다가 재개되는 경우 DMS가 S3 버킷에 중복 레코드를 쓸 수 있습니다.

  • PreserveTransactionstrue로 설정하여 대상 엔드포인트를 구성하는 경우 테이블을 다시 로드해도 이전에 생성된 CDC 파일은 지워지지 않습니다. 자세한 내용은 S3 대상의 트랜잭션 순서를 포함한 변경 데이터 캡처(CDC). 섹션을 참조하세요.

S3를 대상으로 하는 검증을 사용하기 위한 사전 요구 사항은 S3 대상 검증 사용에 대한 제한 사항를 참조하십시오.

보안

Amazon S3를 대상으로 사용하려면 마이그레이션에 사용되는 계정에는 대상으로 사용되는 Amazon S3 버킷에 대한 쓰기 및 삭제 액세스 권한이 있어야 합니다. Amazon S3에 액세스하는 데 필요한 권한을 가진 IAM 역할의 Amazon 리소스 이름(ARN)을 지정합니다.

AWS DMS는 Amazon S3에 대해 사전 정의된 권한 부여 집합 즉, 미리 제공된 ACL(액세스 제어 목록)을 지원합니다. 각각의 미리 제공된 ACL에는 Amazon S3 버킷에 대한 권한을 설정하는 데 사용할 수 있는 피부여자 및 권한 집합이 있습니다. S3 대상 엔드포인트에 대한 연결 문자열 속성에서 cannedAclForObjects를 사용하여 미리 제공된 ACL을 지정할 수 있습니다. 추가 연결 속성 cannedAclForObjects 사용에 관한 자세한 내용은 Amazon S3를 AWS DMS의 대상으로 사용 시 엔드포인트 설정 단원을 참조하십시오. Amazon S3에서 미리 제공된 ACL에 관한 자세한 내용은 미리 제공된 ACL 단원을 참조하십시오.

마이그레이션에 사용하는 IAM 역할이 s3:PutObjectAcl API 작업을 수행할 수 있어야 합니다.

Apache Parquet를 사용하여 Amazon S3 객체 저장

쉼표로 구분된 값(.csv) 형식이 Amazon S3 대상 객체의 기본 스토리지 형식입니다. 보다 간소화된 스토리지와 보다 빠른 쿼리를 위해 Apache Parquet(.parquet)를 스토리지 형식으로 대신 사용할 수 있습니다.

Apache Parquet는 원래 하둡용으로 개발된 오픈 소스 파일 스토리지 형식입니다. Apache Parquet에 관한 자세한 내용은 https://parquet.apache.org/를 참조하십시오.

.parquet를 마이그레이션된 S3 대상 객체의 스토리지 형식으로 설정하기 위해 다음 메커니즘을 사용할 수 있습니다.

Amazon S3 객체 태그 지정

작업-테이블 매핑 규칙의 일환으로 적절한 JSON 객체m를 지정하여 복제 인스턴스가 생성하는 Amazon S3 객체에 태그를 지정할 수 있습니다. 유효한 태그 이름을 포함하여 S3 객체 태그 지정의 요구 사항 및 옵션에 관한 자세한 내용은 Amazon Simple Storage Service 사용 설명서객체 태그 지정을 참조하십시오. JSON을 사용한 테이블 매핑에 관한 자세한 내용은 JSON을 사용하여 테이블 선택 및 변환 지정 단원을 참조하십시오.

selection 규칙 유형의 JSON 객체를 하나 이상 사용하여 지정된 테이블 및 스키마를 위해 생성된 S3 객체에 태그를 지정합니다. 그런 다음, add-tag 작업을 사용하여 post-processing 규칙 유형의 JSON 객체 중 하나 이상에서 이 selection 객체(또는 객체들)를 따릅니다. 이러한 사후 처리 규칙은 태그 지정하려는 S3 객체를 식별하고 이러한 S3 객체에 추가하려는 태그의 이름과 값을 지정합니다.

다음 테이블에서 post-processing 규칙 유형의 JSON 객체에 지정할 파라미터를 찾을 수 있습니다.

파라미터 가능한 값 Description
rule-type post-processing

생성된 대상 객체에 사후 처리 작업을 적용하는 값입니다. 하나 이상의 사후 처리 규칙을 지정하여 선택한 S3 객체에 태그를 지정할 수 있습니다.

rule-id 숫자 값. 규칙을 식별하기 위한 고유한 숫자 값입니다.
rule-name 영숫자 값입니다. 규칙을 식별하기 위한 고유한 이름입니다.
rule-action add-tag S3 객체에 적용할 사후 처리 작업입니다. add-tag 작업의 단일 JSON 사후 처리 객체를 사용하여 하나 이상의 태그를 추가할 수 있습니다.
object-locator

schema-name – 테이블 스키마의 이름입니다.

table-name – 테이블의 이름입니다.

규칙이 적용되는 각 스키마와 테이블의 이름입니다. 각 object-locator 파라미터 값의 전부 또는 일부에 '%'(퍼센트 기호)를 와일드카드로 사용할 수 있습니다. 따라서 다음 항목들을 일치시킬 수 있습니다.

  • 단일 스키마의 단일 테이블

  • 일부 또는 전체 스키마의 단일 테이블

  • 단일 스키마의 일부 또는 전체 테이블

  • 일부 또는 전체 스키마의 일부 또는 전체 테이블

tag-set

key – 단일 태그의 유효한 이름입니다.

value – 이 태그의 유효한 JSON 값입니다.

지정된 object-locator와 일치하는 생성된 각 S3 객체에 설정하려는 하나 이상의 태그 이름과 값입니다. 하나의 tag-set 파라미터 객체에서 최대 10개의 키-값 페어를 지정할 수 있습니다. S3 객체 태그 지정에 관한 자세한 내용은 Amazon Simple Storage Service 사용 설명서객체 태그 지정을 참조하세요.

${dyn-value}를 사용하여 태그의 keyvalue 파라미터 값 전부 또는 일부에 동적 값을 지정할 수도 있습니다. 여기서 ${dyn-value}${schema-name} 또는 ${table-name}일 수 있습니다. 따라서 현재 선택된 스키마 또는 테이블의 이름을 파라미터 값의 전체 또는 일부로 삽입할 수 있습니다.

참고
중요

key 파라미터의 동적 값을 삽입하는 경우, 사용 방법에 따라 S3객체의 중복된 이름이 있는 태그를 생성할 수 있습니다. 이 경우, 중복 태그 설정 중 하나만 객체에 추가됩니다.

여러 post-processing 규칙 유형을 지정하여 일련의 선택된 S3 객체에 태그를 지정하는 경우, 각 S3 객체에는 하나의 사후 처리 규칙으로부터 단 하나의 tag-set 객체만 사용하여 태그가 지정됩니다. 주어진 S3 객체에 태그를 지정하는 데 사용되는 특정 태그 세트는 연결된 객체 로케이터가 해당 S3 객체와 가장 잘 일치하는 사후 처리 규칙의 태그 세트입니다.

예를 들어, 2개의 사후 처리 규칙이 동일한 S3 객체를 식별한다고 가정해 보겠습니다. 또한 한 규칙의 객체 로케이터가 와일드카드를 사용하며 다른 한 규칙의 객체 로케이터는 정확한 일치를 사용하여 S3 객체를 (와일드카드 없이) 식별하는 경우를 가정해 보겠습니다. 이 경우, 정확한 일치를 사용하는 사후 처리 규칙에 연결된 태그 세트가 S3 객체의 태그 지정에 사용됩니다. 여러 사후 처리 규칙이 주어진 S3 객체를 똑같이 잘 일치시키는 경우, 이러한 첫 번째 사후 처리 규칙에 연결된 태그 세트가 객체 태그 지정에 사용됩니다.

예 단일 테이블 및 스키마를 위해 생성된 S3 객체에 정적 태그 추가

다음 선택 및 사후 처리 규칙은 3개의 태그(tag_1, tag_2, tag_3 및 해당 정적 값 value_1, value_2, value_3)를 생성된 S3 객체에 추가합니다. 이 S3 객체는 스키마 이름이 aat2STOCK이라는 이름의 소스에 있는 단일 테이블에 해당됩니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "5", "rule-name": "5", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" }, { "key": "tag_3", "value": "value_3" } ] } ] }
예 여러 테이블 및 스키마를 위해 생성된 S3 객체에 정적 및 동적 태그 추가

다음 예에는 1개의 선택 규칙과 2개의 사후 처리 규칙이 있습니다. 여기서 소스의 입력에는 모든 테이블과 테이블의 모든 스키마가 포함됩니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "%", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_${table-name}" } ] }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat", "table-name": "ITEM", }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" } ] } ] }

첫 번째 사후 처리 규칙은 2개의 태그(dw-schema-namedw-schema-table) 및 해당 동적 값(${schema-name}my_prefix_${table-name})을 대상에 생성된 거의 모든 S3 객체에 추가합니다. 예외는 두 번째 사후 처리 규칙으로 식별되고 태그 지정된 S3 객체입니다. 따라서 와일드카드 객체 로케이터에 의해 식별된 각각의 S3 객체는 소스에서 상응하는 스키마와 테이블을 식별하는 태그를 사용하여 생성됩니다.

두 번째 사후 처리 규칙은 tag_1tag_2와 해당 정적 값 value_1value_2를 정확한 일치 객체 로케이터에 의해 식별되는 생성된 S3 객체에 추가합니다. 생성된 이 S3 객체는 따라서 스키마 이름이 aatITEM이라는 이름의 소스에 있는 단일 테이블에 상응합니다. 정확한 일치로 인해 이러한 태그는 와일드카드만으로 S3 객체를 일치시키는 첫 번째 사후 처리 규칙에서 추가된 이 객체의 모든 태그를 대체합니다.

예 S3 객체에 동적 태그 이름과 값을 모두 추가

다음 예에는 2개의 선택 규칙과 1개의 사후 처리 규칙이 있습니다. 여기서 소스의 입력에는 retail 또는 wholesale 스키마의 ITEM 테이블만 포함됩니다.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "retail", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "wholesale", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "ITEM", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_ITEM" }, { "key": "${schema-name}_ITEM_tag_1", "value": "value_1" }, { "key": "${schema-name}_ITEM_tag_2", "value": "value_2" } ] ] }

사후 처리 규칙의 태그 세트는 2개의 태그(dw-schema-namedw-schema-table)를 대상의 ITEM 테이블을 위해 생성된 모든 S3 객체에 추가합니다. 첫 번째 태그는 동적 값 "${schema-name}"를 갖고 두 번째 태그는 정적 값 "my_prefix_ITEM"을 갖습니다. 따라서 각각의 대상 S3 객체는 소스에서 상응하는 스키마와 테이블을 식별하는 태그를 사용하여 생성됩니다.

또한 태그 세트는 동적 이름이 있는 2개의 태그(${schema-name}_ITEM_tag_1"${schema-name}_ITEM_tag_2")를 추가합니다. 이러한 태그는 상응하는 정적 값 value_1value_2를 갖습니다. 따라서 이러한 태그는 각각 현재의 스키마 retail 또는 wholesale에 대해 이름이 지정됩니다. 각 객체가 단일한 고유 스키마 이름을 위해 생성되기 때문에 이 객체에는 중복된 동적 태그 이름을 생성할 수 없습니다. 이 스키마 이름은 다른 방식으로 고유한 태그 이름을 생성하는 데 사용됩니다.

AWS KMS 키를 생성하여 Amazon S3 대상 객체 암호화

사용자 지정 AWS KMS 키를 생성하고 사용하여 Amazon S3 대상 객체를 암호화할 수 있습니다. KMS 키를 생성한 후 S3 대상 엔드포인트를 만들 때 다음 방법 중 하나로 이 키를 사용하여 객체를 암호화할 수 있습니다.

  • AWS CLI를 사용하여 create-endpoint 명령을 실행할 때 (기본 .csv 파일 스토리지 형식의) S3 대상 객체에 다음 옵션을 사용하십시오.

    --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'

    여기서 your-KMS-key-ARN은 KMS 키의 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 Amazon S3 대상에서 데이터 암호화, parquet 파일 및 CDC 사용 섹션을 참조하세요.

  • 추가 연결 속성 encryptionMode를 값 SSE_KMS로 설정하고, 추가 연결 속성 serverSideEncryptionKmsKeyId는 KMS 키의 ARN으로 설정합니다. 자세한 내용은 Amazon S3를 AWS DMS의 대상으로 사용 시 엔드포인트 설정 섹션을 참조하세요.

KMS 키를 사용하여 Amazon S3 대상 객체를 암호화하려면 S3 버킷에 액세스할 권한이 있는 IAM 역할이 필요합니다. 그러면 생성한 암호화 키에 연결된 정책(키 정책)에서 이 IAM 역할에 액세스합니다. 이 작업은 IAM 콘솔에서 다음을 생성하여 수행할 수 있습니다.

  • Amazon S3 버킷에 액세스할 권한이 있는 정책.

  • 이 정책이 있는 IAM 역할.

  • 이 역할을 참조하는 키 정책이 있는 KMS 키 암호화 키.

다음 절차에서 그 방법을 설명합니다.

Amazon S3 버킷에 액세스할 권한이 있는 IAM 정책을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 여세요.

  2. 탐색 창에서 정책을 선택합니다. 정책 페이지가 열립니다.

  3. 정책 생성을 선택합니다. 정책 생성 페이지가 열립니다.

  4. 서비스를 선택하고 S3를 선택합니다. 작업 권한 목록이 나타납니다.

  5. 모두 확장을 선택하여 목록을 확장하고 최소한 다음 권한을 선택합니다.

    • ListBucket

    • PutObject

    • DeleteObject

    필요한 그 밖의 권한을 선택한 다음 모두 축소를 선택하여 목록을 축소합니다.

  6. 리소스를 선택하여 액세스하려는 리소스를 지정합니다. 최소한 모든 리소스를 선택하여 일반적인 S3 리소스 액세스 권한을 제공합니다.

  7. 필요한 그 밖의 조건 또는 권한을 추가한 다음 정책 검토를 선택합니다. 정책 검토 페이지에서 결과를 확인합니다.

  8. 필요한 설정이 되었다면 정책의 이름(예: DMS-S3-endpoint-access)과 추가 설명을 입력한 다음 정책 생성을 선택합니다. 정책이 생성되었다는 메시지와 함께 정책 페이지가 열립니다.

  9. 정책 목록에서 정책 이름을 검색하고 선택합니다. 다음과 비슷한 정책의 JSON이 표시되는 요약 페이지가 나타납니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": "*" } ] }

이제 암호화를 위해 Amazon S3 리소스에 액세스할 수 있는 지정된 이름의 새 정책이 생성되었습니다(예: DMS-S3-endpoint-access).

이 정책을 사용하여 IAM 역할을 생성하려면
  1. IAM 콘솔의 탐색 창에서 역할을 선택합니다. 역할 세부 정보 페이지가 열립니다.

  2. 역할 생성을 선택합니다. 역할 생성 페이지가 열립니다.

  3. AWS 서비스를 신뢰할 수 있는 엔터티 유형으로 선택한 상태에서 해당 IAM 역할을 사용할 서비스로 DMS를 선택합니다.

  4. 다음: 권한을 선택합니다. 권한 정책 연결 뷰는 역할 생성 페이지에 표시됩니다.

  5. 이전 절차(DMS-S3-endpoint-access)에서 생성한 IAM 역할에 대한 IAM 정책을 찾아 선택합니다.

  6. 다음: 태그를 선택합니다. 태그 추가 뷰는 역할 생성 페이지에 나타납니다. 여기서 원하는 태그를 추가할 수 있습니다.

  7. 다음: 검토를 선택합니다. 검토 뷰는 역할 생성 페이지에 나타납니다. 여기서 결과를 확인할 수 있습니다.

  8. 필요한 설정이 되었다면 역할의 이름(필수, 예를 들어 DMS-S3-endpoint-access-role)과 추가 설명을 입력한 다음, 역할 생성을 선택합니다. 역할이 생성되었다는 메시지와 함께 역할 세부 정보 페이지가 열립니다.

이제 암호화를 위해 Amazon S3 리소스에 액세스할 수 있는 지정된 이름의 새 역할이 생성되었습니다(예: DMS-S3-endpoint-access-role).

IAM 역할을 참조하는 키 정책이 있는 KMS 키 암호화 키를 생성하려면
참고

AWS DMS에서 AWS KMS 암호화 키를 사용하는 방법에 관한 자세한 내용은 암호화 키 설정 및 AWS KMS 권한 지정 단원을 참조하십시오.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/kms에서 AWS Key Management Service(AWS KMS) 콘솔을 엽니다.

  2. AWS 리전을 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.

  3. 탐색 창에서 고객 관리형 키를 선택합니다.

  4. 키 생성을 선택합니다. 키 구성 페이지가 열립니다.

  5. 키 유형에 대해 대칭을 선택합니다.

    참고

    Amazon S3와 같은 모든 AWS 서비스는 대칭 암호화 키로만 작동하므로 이 키를 생성하면 대칭 키만 생성할 수 있습니다.

  6. [Advanced Options]를 선택합니다. 키 구성 요소 오리진KMS가 선택되어 있는지 확인하고 다음을 선택합니다. 레이블 추가 페이지가 열립니다.

  7. 별칭 및 설명 생성에 키의 별칭(예: DMS-S3-endpoint-encryption-key)과 추가 설명을 입력합니다.

  8. 태그에서 키 식별과 키 사용 추적에 도움이 되는 태그를 추가한 후 다음을 선택합니다. 키 관리 권한 정의 페이지가 열리고 선택할 수 있는 사용자 및 역할 목록이 표시됩니다.

  9. 키를 관리할 사용자와 역할을 추가합니다. 키를 관리하는 데 필요한 권한이 이러한 사용자와 역할에 있는지 확인합니다.

  10. 키 삭제에서 키 관리자가 키를 삭제할 수 있는지 여부를 선택한 후 다음을 선택합니다. 키 사용 권한 정의 페이지가 열리고 선택할 수 있는 추가 사용자 및 역할 목록이 표시됩니다.

  11. 이 계정의 Amazon S3 대상에 대해 암호화 작업을 수행할 사용자를 선택합니다. 또한 이전에 역할에서 생성한 역할을 선택하여 Amazon S3 대상 객체 암호화를 위한 액세스를 활성화합니다(예: DMS-S3-endpoint-access-role).

  12. 목록에 없는 다른 계정을 추가하여 동일한 액세스 권한을 부여하려면 다른 AWS 계정에 대해 다른 AWS 계정 추가를 선택한 후 다음을 선택합니다. 키 정책 검토 및 편집 페이지가 열리고 기존 JSON을 입력하여 검토하고 편집할 수 있는 키 정책 JSON이 표시됩니다. 여기서 키 정책이 이전 단계에서 선택한 역할 및 사용자(예: AdminUser1)를 참조하는 위치를 확인할 수 있습니다. 다음 예제에 나온 것처럼 다양한 보안 주체(사용자 및 역할)에 허용되는 다양한 키 작업도 볼 수 있습니다.

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
  13. 마침을 클릭합니다. KMS 키가 생성되었다는 메시지와 함께 암호화 키 페이지가 열립니다.

이제 지정된 별칭의 새 KMS 키가 생성되었습니다(예: DMS-S3-endpoint-encryption-key). 이 키를 통해 AWS DMS가 Amazon S3 대상 객체를 암호화할 수 있습니다.

날짜 기반 폴더 파티셔닝 사용

AWS DMS는 Amazon S3를 대상 엔드포인트로 사용하는 경우 트랜잭션 커밋 날짜를 기반으로 S3 폴더 파티션을 지원합니다. 날짜 기반 폴더 파티셔닝을 사용하면 단일 소스 테이블의 데이터를 S3 버킷의 시간 계층 폴더 구조에 쓸 수 있습니다. S3 대상 엔드포인트를 생성할 때 폴더를 파티셔닝하면 다음을 수행할 수 있습니다.

  • S3 객체를 더 잘 관리할 수 있습니다.

  • 각 S3 폴더의 크기를 제한하십시오.

  • 데이터 레이크 쿼리 또는 기타 후속 작업을 최적화합니다.

S3 대상 엔드포인트를 생성할 때 날짜 기반 폴더 파티셔닝을 활성화할 수 있습니다. 기존 데이터를 마이그레이션하고 진행 중인 변경 사항을 복제(전체 로드+CDC)하거나 데이터 변경 사항만 복제(CDC만 해당)할 때 활성화할 수 있습니다. 다음과 같은 대상 엔드포인트 설정을 사용합니다.

  • DatePartitionEnabled – 날짜를 기준으로 파티셔닝을 지정합니다. 이 부울 옵션을 true로 설정하여 트랜잭션 커밋 날짜를 기준으로 S3 버킷 폴더를 파티셔닝합니다.

    이 설정은 PreserveTransactions 또는 CdcPath와 함께 사용할 수 없습니다.

    기본 값은 false입니다.

  • DatePartitionSequence – 폴더 파티셔닝 중 사용할 날짜 형식의 순서를 식별합니다. 이 ENUM 옵션을 YYYYMMDD, YYYYMMDDHH, YYYYMM, MMYYYYDD 또는 DDMMYYYY로 설정합니다. 기본 값은 YYYYMMDD입니다. DatePartitionEnabledtrue.로 설정된 경우 이 설정을 사용합니다.

  • DatePartitionDelimiter – 폴더 파티셔닝 중 사용할 날짜 구분 기호를 지정합니다. 이 ENUM 옵션을 SLASH, DASH, UNDERSCORE 또는 NONE로 설정합니다. 기본 값은 SLASH입니다. DatePartitionEnabledtrue로 설정된 경우 이 설정을 사용합니다.

다음 예제는 데이터 파티션 시퀀스의 기본값과 구분 기호를 사용하여 날짜 기반 폴더 파티셔닝을 활성화하는 방법을 보여줍니다. AWS CLI.create-endpoint 명령의 --s3-settings '{json-settings}' 옵션을 사용합니다.

--s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'

Amazon S3를 AWS DMS의 대상으로 사용할 때 분할된 소스의 병렬 로드

분할된 데이터 소스를 Amazon S3 대상에 병렬로 전체 로드하도록 구성할 수 있습니다. 이 접근 방식은 지원되는 소스 데이터베이스 엔진에서 S3 대상으로 분할된 데이터를 마이그레이션할 때 로드 시간을 개선합니다. 분할된 소스 데이터의 로드 시간을 개선하려면 소스 데이터베이스에 있는 모든 테이블의 파티션에 매핑된 S3 대상 하위 폴더를 생성합니다. 파티션에 바인딩된 이러한 하위 폴더를 사용하면 AWS DMS는 병렬 프로세스를 실행하여 대상의 각 하위 폴더를 채울 수 있습니다.

S3 대상의 병렬 전체 로드를 구성하기 위해 S3는 테이블 매핑의 table-settings 규칙에 대해 세 가지 parallel-load 규칙 유형을 지원합니다.

  • partitions-auto

  • partitions-list

  • ranges

이러한 병렬 로드 규칙 유형에 관한 자세한 내용은 테이블 및 컬렉션 설정 규칙과 작업 단원을 참조하십시오.

partitions-autopartitions-list 규칙 유형의 경우, AWS DMS는 다음과 같이 소스 엔드포인트의 각 파티션 이름을 사용하여 대상 하위 폴더 구조를 식별합니다.

bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv

여기서 데이터가 S3 대상으로 마이그레이션되어 저장되는 하위 폴더 경로에는 이름이 같은 소스 파티션에 해당하는 추가 partition_name 하위 폴더가 포함됩니다. 그러면 이 partition_name 하위 폴더는 지정된 소스 파티션에서 마이그레이션된 데이터를 포함하는 하나 이상의 LOADseq_num.csv 파일을 저장합니다. 여기서 seq_num은 .csv 파일 이름의 시퀀스 번호 접미사입니다(예: .csv 파일 LOAD00000001.csv의 이름에 포함된 00000001).

하지만 MongoDB, DocumentDB 같은 일부 데이터베이스 엔진에는 파티션이라는 개념이 없습니다. 이러한 데이터베이스 엔진의 경우, AWS DMS는 다음과 같이 실행 중인 소스 세그먼트 인덱스를 대상 .csv 파일 이름에 접두사로 s추가합니다.

.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv .../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv ... .../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv .../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv

여기서 파일 SEGMENT1_LOAD00000001.csvSEGMENT1_LOAD00000002.csv는 실행 중인 소스 세그먼트 인덱스 접두사 SEGMENT1과 동일한 접두사를 포함하여 이름이 지정됩니다. 이 두 개의.csv 파일에 대해 마이그레이션된 소스 데이터는 실행 중인 동일한 소스 세그먼트 인덱스와 연결되어 있기 때문에 그와 같은 이름이 지정됩니다. 반면, 대상 SEGMENT2_LOAD00000009.csvSEGMENT3_LOAD0000000A.csv 파일에 각각 저장된 마이그레이션된 데이터는 서로 다른 실행 소스 세그먼트 인덱스와 연결됩니다. 각 파일의 파일 이름 앞에는 실행 중인 세그먼트 인덱스의 이름 SEGMENT2SEGMENT3이 접두사로 붙습니다.

ranges 병렬 로드 유형의 경우, table-settings 규칙의 columnsboundaries 설정을 사용하여 열 이름과 열 값을 정의합니다. 이러한 규칙을 사용하여 다음과 같이 세그먼트 이름에 해당하는 파티션을 지정할 수 있습니다.

"parallel-load": { "type": "ranges", "columns": [ "region", "sale" ], "boundaries": [ [ "NORTH", "1000" ], [ "WEST", "3000" ] ], "segment-names": [ "custom_segment1", "custom_segment2", "custom_segment3" ] }

여기서 segment-names 설정은 S3 대상에서 데이터를 병렬로 마이그레이션하기 위한 세 개의 파티션 이름을 정의합니다. 마이그레이션된 데이터는 다음과 같이 병렬로 로드되어 파티션 하위 폴더 아래의 .csv 파일에 순서대로 저장됩니다.

.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv .../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv .../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv

여기서 AWS DMS는 세 파티션 하위 폴더에 각각 일련의 .csv 파일을 순서대로 저장합니다. 각 파티션 하위 폴더에 있는 일련의 .csv 파일은 모든 데이터가 마이그레이션될 때까지 LOAD00000001.csv를 시작으로 단계적으로 이름이 지정됩니다.

경우에 따라서는 segment-names 설정을 사용하여 ranges 병렬 로드 유형에 대한 파티션 하위 폴더의 이름을 명시적으로 지정하지 않을 수 있습니다. 이 경우 AWS DMS는 해당 table_name 하위 폴더 아래에 일련의 .csv 파일을 각각 생성하는 기본값을 적용합니다. 여기서 AWS DMS는 다음과 같이 일련의 .csv 파일의 s파일 이름 앞에 실행 중인 소스 세그먼트 인덱스의 이름을 접두사로 붙입니다.

.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv .../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv .../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv ... .../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv

Amazon S3를 AWS DMS의 대상으로 사용 시 엔드포인트 설정

추가 연결 속성을 사용하는 것과 마찬가지로 엔드포인트 설정을 사용하여 Amazon S3 대상을 구성할 수 있습니다. AWS DMS 콘솔을 사용하거나 AWS CLIcreate-endpoint 명령을 --s3-settings '{"EndpointSetting": "value", ...}' JSON 구문과 함께 사용하여 대상 엔드포인트를 생성할 때 설정을 지정합니다.

Amazon S3를 대상으로 하여 사용할 수 있는 엔드포인트 설정은 다음 테이블에 나와 있습니다.

옵션 설명
CsvNullValue

AWS DMS가 null 값을 처리하는 방법을 지정하는 선택적 파라미터입니다. null 값을 처리하는 동안 이 파라미터를 사용하여 대상에 쓸 때 사용자 정의 문자열을 null로 전달할 수 있습니다. 예를 들어, 대상 열이 null을 허용하는 경우, 이 옵션을 사용하여 빈 문자열 값과 null 값을 구분할 수 있습니다. 따라서 이 파라미터 값을 빈 문자열(" " 또는 '')로 설정하면 AWS DMS는 빈 문자열을 NULL 대신 null 값으로 처리합니다.

기본 값: NULL

유효값: 모든 유효한 문자열

예제: --s3-settings '{"CsvNullValue": " "}'

AddColumnName

true 또는 y로 설정할 때 .csv 출력 파일에 열 이름 정보를 추가하는 데 사용할 수 있는 선택적 파라미터입니다.

이 파라미터는 PreserveTransactions 또는 CdcPath와 함께 사용할 수 없습니다.

기본 값: false

유효값: true, false, y, n

예제: --s3-settings '{"AddColumnName": true}'

AddTrailingPaddingCharacter

S3 대상 엔드포인트 설정 AddTrailingPaddingCharacter를 사용하여 문자열 데이터에 패딩을 추가합니다. 기본 값은 false입니다.

유형: 부울

예제: --s3-settings '{"AddTrailingPaddingCharacter": true}'

BucketFolder

S3 버킷의 폴더 이름을 설정하는 선택적 파라미터입니다. 제공되는 경우, 대상 객체는 경로 BucketFolder/schema_name/table_name/에서 .csv 또는 .parquet 파일로 생성됩니다. 이 파라미터가 지정되지 않은 경우, 사용되는 경로는 schema_name/table_name/입니다.

예제: --s3-settings '{"BucketFolder": "testFolder"}'

BucketName

S3 대상 객체가 .csv 또는 .parquet 파일로 생성되는 S3 버킷의 이름입니다.

예제: --s3-settings '{"BucketName": "buckettest"}'

CannedAclForObjects

AWS DMS가 S3 버킷에서 .csv 또는 .parquet 파일로 생성되는 객체에 대한 사전 정의된(미리 제공된) 액세스 제어 목록을 지정할 수 있도록 하는 값입니다. Amazon S3에서 미리 제공된 ACL에 관한 자세한 내용은 Amazon S3 개발자 안내서미리 제공된 ACL을 참조하세요.

기본값: NONE

이 속성의 유효값은 NONE, PRIVATE, PUBLIC_READ, PUBLIC_READ_WRITE, AUTHENTICATED_READ, AWS_EXEC_READ, BUCKET_OWNER_READ, BUCKET_OWNER_FULL_CONTROL입니다.

예제: --s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'

CdcInsertsOnly

변경 데이터 캡처(CDC) 로드 중 쉼표로 구분된 값(.csv) 또는 컬럼 방식 스토리지(.parquet) 출력 파일에 INSERT 작업만을 작성하는 선택적 파라미터입니다. 기본적으로(false 설정), .csv 또는 .parquet 레코드의 첫 번째 필드에는 문자 I(INSERT), U(UPDATE) 또는 D(DELETE)가 포함됩니다. 이 문자는 대상에 대한 CDC 로드를 위해 소스 데이터베이스에 행이 삽입, 업데이트 또는 삭제되었는지 여부를 나타냅니다. cdcInsertsOnlytrue 또는 y로 설정되면 소스 데이터베이스의 INSERT만 .csv 또는 .parquet 파일로 마이그레이션됩니다.

.csv 형식의 경우에만 IncludeOpForFullLoad의 값에 따라 이 INSERT가 기록되는 방식이 달라집니다. IncludeOpForFullLoadtrue로 설정되면 모든 CDC 레코드의 첫 번째 필드는 소스에서 INSERT 작업을 나타내기 위해 I로 설정됩니다. IncludeOpForFullLoadfalse로 설정되면 모든 CDC 레코드는 소스에서 INSERT 작업을 나타내는 첫 번째 필드 없이 작성됩니다. 이러한 파라미터가 상호 작용하는 방식에 관한 자세한 내용은 마이그레이션된 S3 데이터에 소스 DB 작업 표시 단원을 참조하십시오.

기본 값: false

유효값: true, false, y, n

예제: --s3-settings '{"CdcInsertsOnly": true}'

CdcInsertsAndUpdates

변경 데이터 캡처(CDC) 로드를 사용하여 INSERT 및 UPDATE 작업을 .csv 또는 .parquet(열 기반 스토리지) 출력 파일에 기록할 수 있습니다. 기본 설정은 false지만 cdcInsertsAndUpdatestrue 또는 y로 설정하면 소스 데이터베이스의 INSERT 및 UPDATE가 .csv 또는 .parquet 파일로 마이그레이션됩니다.

.csv 파일 형식의 경우에만 이러한 INSERT 및 UPDATE가 기록되는 방법이 includeOpForFullLoad 파라미터 값에 따라 달라집니다. includeOpForFullLoadtrue로 설정하면 모든 CDC 레코드의 첫 번째 필드가 소스에서 INSERT 및 UPDATE 작업을 나타내도록 I 또는 U로 설정됩니다. 그러나 includeOpForFullLoadfalse로 설정하면 소스에서 INSERT 또는 UPDATE 작업 표시 없이 CDC 레코드가 기록됩니다.

이러한 파라미터가 상호 작용하는 방식에 관한 자세한 내용은 마이그레이션된 S3 데이터에 소스 DB 작업 표시 단원을 참조하십시오.

참고

CdcInsertsOnlycdcInsertsAndUpdates는 동일한 엔드 포인트에서 둘 다 true로 설정할 수 없습니다. 동일한 엔드포인트에 대해 cdcInsertsOnly 또는 cdcInsertsAndUpdatestrue로 설정합니다. 단, 둘 다 설정하지는 않습니다.

기본 값: false

유효값: true, false, y, n

예제: --s3-settings '{"CdcInsertsAndUpdates": true}'

CdcPath

CDC 파일의 폴더 경로를 지정합니다. S3 소스의 경우, 태스크가 변경 데이터를 캡처하는 경우 이 설정이 필요합니다. 그렇지 않으면 선택 사항입니다. CdcPath가 설정된 경우 DMC는 이 경로에서 CDC 파일을 읽고 데이터 변경 사항을 대상 엔드포인트로 복제합니다. S3 대상의 경우 PreserveTransactions를 true로 설정하면 DMS는 이 파라미터를 S3 대상의 폴더 경로로 설정했는지 확인합니다. 폴더 경로에서는 DMS가 CDC 로드에 대한 트랜잭션 순서를 저장할 수 있습니다. DMS는 이 CDC 폴더 경로를 S3 대상 작업 디렉터리 또는 BucketFolderBucketName으로 지정된 S3 대상 위치에 생성합니다.

이 파라미터는 DatePartitionEnabled 또는 AddColumnName과 함께 사용할 수 없습니다.

유형: 문자열

예를 들어, CdcPathMyChangedData로 지정하고 BucketNameMyTargetBucket으로 지정하지만 BucketFolder를 지정하지 않으면 DMS는 CDC 폴더 경로(MyTargetBucket/MyChangedData)를 생성합니다.

동일한 CdcPath를 지정하고 BucketNameMyTargetBucket으로, BucketFolderMyTargetData로 지정하면 DMS는 CDC 폴더 경로(MyTargetBucket/MyTargetData/MyChangedData)를 생성합니다.

참고

이 설정은 AWS DMS 버전 3.4.2 및 이후 버전에서 지원됩니다.

트랜잭션 순서대로 데이터 변경을 캡처할 때 DMS는 대상의 DataFormat S3 설정 값에 관계없이 항상 행 변경 내용을 .csv 파일에 저장합니다. DMS는 .parquet 파일을 사용하여 데이터 변경 사항을 트랜잭션 순서대로 저장하지 않습니다.

CdcMaxBatchInterval

파일을 Amazon S3에 출력할 때까지의 최대 간격(초)입니다.

기본값: 60초

CdcMaxBatchInterval이 지정되고 CdcMinFileSize가 지정되면 파일 쓰기는 가장 먼저 충족되는 파라미터 조건에 의해 트리거됩니다.

CdcMinFileSize

Amazon S3에 파일을 출력하기 위한 최소 파일 크기 조건(단위: 킬로바이트[KB])

기본값: 32000 KB

CdcMinFileSize가 지정되고 CdcMaxBatchInterval이 지정되면 파일 쓰기는 가장 먼저 충족되는 파라미터 조건에 의해 트리거됩니다.

PreserveTransactions

true로 설정된 경우 DMS는 CdcPath로 지정된 Amazon S3 대상의 변경 데이터 캡처(CDC)에 대한 트랜잭션 순서를 저장합니다.

이 파라미터는 DatePartitionEnabled 또는 AddColumnName와 함께 사용할 수 없습니다.

유형: 부울

트랜잭션 순서대로 데이터 변경을 캡처할 때 DMS는 대상의 DataFormat S3 설정 값에 관계없이 항상 행 변경 내용을 .csv 파일에 저장합니다. DMS는 .parquet 파일을 사용하여 데이터 변경 사항을 트랜잭션 순서대로 저장하지 않습니다.

참고

이 설정은 AWS DMS 버전 3.4.2 및 이후 버전에서 지원됩니다.

IncludeOpForFullLoad

전체 로드 중 쉼표로 구분된 값(.csv) 출력 파일에만 INSERT 작업을 쓰기 위한 선택적 파라미터입니다.

전체 로드의 경우, 레코드는 삽입만 가능합니다. 기본적으로(false 설정) 전체 로드에 대한 이 출력 파일에는 행이 소스 데이터베이스에 삽입되었음을 나타내는 레코드가 기록되어 있지 않습니다. IncludeOpForFullLoadtrue 또는 y로 설정되면 .csv 파일의 첫 번째 필드에 INSERT가 I 주석으로 기록됩니다.

참고

이 파라미터는 CdcInsertsOnly 또는 CdcInsertsAndUpdates와 함께 .csv 파일의 출력에만 적용됩니다. 이러한 파라미터가 상호 작용하는 방식에 관한 자세한 내용은 마이그레이션된 S3 데이터에 소스 DB 작업 표시 단원을 참조하십시오.

기본 값: false

유효값: true, false, y, n

예제: --s3-settings '{"IncludeOpForFullLoad": true}'

CompressionType

GZIP으로 설정하면 GZIP을 사용하여 대상 .csv 또는 .parquet 파일을 압축하는 선택적 파라미터입니다. 이 파라미터를 기본값으로 설정하면 파일을 압축되지 않은 상태로 둡니다.

기본 값: NONE

유효값: GZIP 또는 NONE

예제: --s3-settings '{"CompressionType": "GZIP"}'

CsvDelimiter

.csv 소스 파일에서 열을 구분하는 데 사용되는 구분 기호입니다. 기본값은 쉼표(,)입니다.

예제: --s3-settings '{"CsvDelimiter": ","}'

CsvRowDelimiter

.csv 소스 파일에서 행을 구분하는 데 사용되는 구분 기호입니다. 기본값은 줄 바꿈(\n)입니다.

예제: --s3-settings '{"CsvRowDelimiter": "\n"}'

MaxFileSize

전체 로드 중에 S3 대상으로 마이그레이션하는 동안 생성할 .csv 파일의 최대 크기(KB 단위)를 지정하는 값입니다.

기본값: 1,048,576KB(1GB)

유효값: 1~1,048,576

예제: --s3-settings '{"MaxFileSize": 512}'

Rfc4180

.csv 파일 형식만 사용하여 Amazon S3로 마이그레이션되는 데이터의 RFC 규정 준수 동작을 설정하는 데 사용되는 선택적 파라미터입니다. Amazon S3을 대상으로 사용하여 이 값을 true 또는 y로 설정하는 경우, 데이터에 따옴표나 쉼표 또는 줄 바꿈 문자가 있다면 AWS DMS는 전체 열을 큰따옴표(")로 묶습니다. 데이터 내 모든 따옴표는 두 번 반복됩니다. 이 형식은 RFC 4180을 준수합니다.

기본 값: true

유효값: true, false, y, n

예제: --s3-settings '{"Rfc4180": false}'

EncryptionMode

S3로 복사되는 .csv 또는 .parquet 객체 파일을 암호화할 서버 측 암호화 모드입니다. 유효값은 SSE_S3(S3 서버 측 암호화) 또는 SSE_KMS(KMS 키 암호화)입니다. SSE_KMS를 선택하는 경우, ServerSideEncryptionKmsKeyId 파라미터를 암호화에 사용할 KMS 키의 Amazon 리소스 이름(ARN)으로 설정합니다.

참고

또한 CLI modify-endpoint 명령을 사용하여 기존 엔드포인트의 EncryptionMode 속성 값을 SSE_KMS에서 SSE_S3로 변경할 수 있습니다. 그러나 EncryptionMode 값을 SSE_S3에서 SSE_KMS로 변경할 수 없습니다.

기본 값: SSE_S3

유효값: SSE_S3 또는 SSE_KMS

예제: --s3-settings '{"EncryptionMode": SSE_S3}'

ServerSideEncryptionKmsKeyId

EncryptionModeSSE_KMS로 설정하는 경우, 이 파라미터를 KMS 키의 Amazon 리소스 이름(ARN)으로 설정합니다. 이 ARN은 계정을 위해 생성한 AWS KMS 키 목록에서 키 별칭을 선택하면 찾을 수 있습니다. 키를 생성할 때 특정 정책과 역할을 이 KMS 키와 연결해야 합니다. 자세한 내용은 AWS KMS 키를 생성하여 Amazon S3 대상 객체 암호화 섹션을 참조하세요.

예제: --s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'

DataFormat

AWS DMS가 S3 객체를 생성하는 데 사용하는 파일의 출력 형식입니다. Amazon S3 대상의 경우, AWS DMS는 .csv 또는 .parquet 파일을 지원합니다. .parquet 파일은 효율적인 압축 옵션과 보다 빠른 쿼리 성능을 갖춘 이진 열 방식 스토리지 형식을 갖고 있습니다. .parquet 파일에 관한 자세한 내용은 https://parquet.apache.org/를 참조하십시오.

기본 값: csv

유효값: csv 또는 parquet

예제: --s3-settings '{"DataFormat": "parquet"}'

EncodingType

Parquet 인코딩 유형입니다. 인코딩 유형 옵션에는 다음이 포함됩니다.

  • rle-dictionary – 이 사전식 인코딩은 반복되는 값을 보다 효율적으로 저장하기 위해 비트 압축과 실행 길이 인코딩의 조합을 사용합니다.

  • plain – 인코딩 없음.

  • plain-dictionary – 이 사전식 인코딩은 주어진 열에서 발생하는 값의 사전을 빌드합니다. 사전은 각 열 청크의 사전 페이지에 저장됩니다.

기본 값: rle-dictionary

유효값: rle-dictionary, plain 또는 plain-dictionary

예제: --s3-settings '{"EncodingType": "plain-dictionary"}'

DictPageSizeLimit

.parquet 파일에서 허용되는 사전 페이지의 최대 크기(단위: 바이트)입니다. 사전 페이지가 이 값을 초과하면 해당 페이지는 일반 인코딩을 사용합니다.

기본값: 1,024,000(1MB)

유효값: 유효한 정수 값

예제: --s3-settings '{"DictPageSizeLimit": 2,048,000}'

RowGroupLength

.parquet 파일의 한 행 그룹에 있는 행 수입니다.

기본값: 10,024(10KB)

유효값: 유효한 정수 값

예제: --s3-settings '{"RowGroupLength": 20,048}'

DataPageSize

.parquet 파일에서 허용되는 데이터 페이지의 최대 크기(단위: 바이트)입니다.

기본값: 1,024,000(1MB)

유효값: 유효한 정수 값

예제: --s3-settings '{"DataPageSize": 2,048,000}'

ParquetVersion

.parquet 파일 형식의 버전입니다.

기본 값: PARQUET_1_0

유효값: PARQUET_1_0 또는 PARQUET_2_0

예제: --s3-settings '{"ParquetVersion": "PARQUET_2_0"}'

EnableStatistics

true 또는 y로 설정하여 .parquet 파일 페이지와 행 그룹에 관한 통계를 활성화합니다.

기본 값: true

유효값: true, false, y, n

예제: --s3-settings '{"EnableStatistics": false}'

TimestampColumnName

S3 대상 엔드포인트 데이터에 타임스탬프 열을 포함시키기 위한 선택적 파라미터입니다.

TimestampColumnName을 비어 있지 않은 값으로 설정하면 AWS DMS는 마이그레이션된 데이터의 .csv 또는 .parquet 객체 파일에 추가 STRING 열을 포함시킵니다.

전체 로드의 경우, 타임스탬프 열의 각 행에는 DMS에 의해 소스에서 대상으로 데이터가 전송된 시점에 대한 타임스탬프가 포함됩니다.

CDC 로드의 경우, 타임스탬프 열의 각 행에는 소스 데이터베이스의 해당 행 커밋에 대한 타임스탬프가 있습니다.

이 타임스탬프 열 값의 문자열 형식은 yyyy-MM-dd HH:mm:ss.SSSSSS입니다. 기본적으로 이 값의 정밀도는 마이크로초입니다. CDC 로드의 경우, 정밀도의 라운딩은 소스 데이터베이스에 대해 DMS가 지원하는 커밋 타임스탬프에 따라 다릅니다.

AddColumnName 파라미터가 true로 설정되면 DMS는 비어 있지 않은 TimestampColumnName 값으로 설정한 타임스탬프 열의 이름도 포함합니다.

예제: --s3-settings '{"TimestampColumnName": "TIMESTAMP"}'

UseTaskStartTimeForFullLoadTimestamp

true로 설정하면 이 파라미터는 데이터를 대상에 쓰는 시간 대신 태스크 시작 시간을 타임스탬프 열 값으로 사용합니다. 전체 로드의 경우, UseTaskStartTimeForFullLoadTimestamptrue로 설정되면 타임스탬프 열의 각 행에 태스크 시작 시간이 포함됩니다. CDC 로드의 경우 타임스탬프 열의 각 행에는 트랜잭션 커밋 시간이 포함됩니다.

UseTaskStartTimeForFullLoadTimestampfalse로 설정되면 타임스탬프 열의 전체 로드 타임스탬프는 데이터가 대상에 도착하는 시간과 함께 증가합니다.

기본 값: false

유효값: true, false

예제: --s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'

UseTaskStartTimeForFullLoadTimestamp: true는 전체 로드에 대한 S3 대상 TimestampColumnName을 CDC 로드 시 TimestampColumnName과 함께 정렬할 수 있도록 도움을 줍니다.

ParquetTimestampInMillisecond

.parquet 형식의 S3 객체 파일에 기록된 모든 TIMESTAMP 열 값의 정밀도를 지정하는 선택적 파라미터입니다.

이 속성을 true 또는 y로 설정하면 AWS DMS는 모든 TIMESTAMP 열을 .parquet 형식 파일에 밀리초 정밀도로 기록합니다. 그렇지 않으면 DMS는 해당 열을 마이크로초 정밀도로 기록합니다.

현재 Amazon Athena 및 AWS Glue은 TIMESTAMP 값에 대한 밀리초 정밀도만 처리할 수 있습니다. Athena 또는 AWS Glue를 사용하여 데이터를 쿼리하거나 처리할 계획인 경우에만 .parquet 형식의 S3 엔드포인트 객체 파일에 대해 이 속성을 true로 설정합니다.

참고
  • AWS DMS는 .csv 형식 S3 파일에 기록된 모든 TIMESTAMP 열 값을 마이크로초 정밀도로 기록합니다.

  • 이 속성의 설정은 TimestampColumnName 속성을 설정하여 삽입된 타임스탬프 열 값의 문자열 형식에는 영향을 미치지 않습니다.

기본 값: false

유효값: true, false, y, n

예제: --s3-settings '{"ParquetTimestampInMillisecond": true}'

GlueCatalogGeneration

AWS Glue Data Catalog을 생성하려면 이 엔드포인트 설정을 true로 설정하십시오.

기본 값: false

유효값: true, false.

예제: --s3-settings '{"GlueCatalogGeneration": true}'

참고: GlueCatalogGenerationPreserveTransactionsCdcPath와 함께 사용하지 마십시오.

AWS DMS의 Amazon S3 대상과 함께 AWS Glue Data Catalog을 사용

AWS Glue는 데이터를 분류하는 간단한 방법을 제공하는 서비스로서, AWS Glue Data Catalog으로 알려진 메타데이터 리포지토리로 구성되어 있습니다. AWS Glue Data Catalog을 Amazon S3 d대상 엔드포인트와 통합하고 Amazon Athena 같은 다른 AWS 서비스를 통해 Amazon S3 데이터를 쿼리할 수 있습니다. Amazon Redshift는 AWS Glue와 함께 연동하지만 AWS DMS는 이를 사전 빌드된 옵션으로 지원하지 않습니다.

데이터 카탈로그를 생성하려면 다음 AWS CLI 예와 같이 GlueCatalogGeneration 엔드포인트 설정을 true로 설정합니다.

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'

csv 형식 데이터가 포함된 전체 부하 복제 작업의 경우, IncludeOpForFullLoadtrue로 설정합니다.

참고: GlueCatalogGenerationPreserveTransactionsCdcPath와 함께 사용하지 마십시오. AWS Glue 크롤러는 지정된 CdcPath에 저장된 파일의 여러 스키마를 조정할 수 없습니다.

Amazon Athena가 Amazon S3 데이터를 인덱싱하고 Amazon Athena를 통해 표준 SQL 쿼리를 사용하여 데이터를 쿼리하려면 엔드포인트에 연결된 IAM 역할에 다음 정책이 있어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::bucket123", "arn:aws:s3:::bucket123/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "arn:aws:glue:*:111122223333:catalog", "arn:aws:glue:*:111122223333:database/*", "arn:aws:glue:*:111122223333:table/*" ] }, { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:CreateWorkGroup" ], "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*" } ] }
참조
  • AWS Glue에 관한 자세한 내용은 AWS Glue 개발자 안내서개념 섹션을 참조하세요.

  • AWS Glue Data Catalog에 관한 자세한 내용은 AWS Glue 개발자 안내서구성 요소를 참조하세요.

Amazon S3 대상에서 데이터 암호화, parquet 파일 및 CDC 사용

S3 대상 엔드포인트 설정을 사용하여 다음을 구성할 수 있습니다.

  • S3 대상 객체를 암호화하기 위한 사용자 지정 KMS 키.

  • S3 대상 객체의 스토리지 형식인 parquet 파일

  • S3 대상의 트랜잭션 순서를 포함한 변경 데이터 캡처(CDC).

  • AWS Glue Data Catalog을 Amazon S3 대상 엔드포인트와 통합하고 Amazon Athena 같은 다른 서비스를 통해 Amazon S3 데이터를 쿼리할 수 있습니다.

데이터 암호화를 위한 AWS KMS 키 설정

다음 예는 S3 대상 객체를 암호화하도록 사용자 지정 KMS 키를 구성하는 방법을 보여 줍니다. 시작하려면 다음 create-endpoint CLI 명령을 실행합니다.

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'

여기서 --s3-settings 옵션에 의해 지정된 JSON 객체는 다음 두 가지 파라미터를 정의합니다. 하나는 값이 SSE_KMSEncryptionMode 파라미터입니다. 다른 하나는 값이 arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480ServerSideEncryptionKmsKeyId 파라미터입니다. 이 값은 사용자 지정 KMS 키의 Amazon 리소스 이름(ARN)입니다. S3 대상의 경우, 추가 설정도 지정할 수 있습니다. 이러한 설정은 서버 액세스 역할을 식별하고 기본 CSV 객체 스토리지 형식의 구분 기호를 제공하며 S3 대상 객체를 저장할 버킷 위치와 이름을 제공합니다.

기본적으로 S3 데이터 암호화는 S3 서버 측 암호화를 사용하여 수행됩니다. 이전 예의 S3 대상의 경우, 다음 예에서처럼 이것은 엔드포인트 설정을 지정하는 것에 해당합니다.

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_S3"}'

S3 서버 측 암호화 작업에 관한 자세한 내용은 서버 측 암호화를 사용하여 데이터 보호 단원을 참조하십시오.

참고

또한 CLI modify-endpoint 명령을 사용하여 기존 엔드포인트의 EncryptionMode 파라미터 값을 SSE_KMS에서 SSE_S3로 변경할 수 있습니다. 그러나 EncryptionMode 값을 SSE_S3에서 SSE_KMS로 변경할 수 없습니다.

.parquet 파일을 사용하여 S3 대상 객체를 저장하기 위한 설정

S3 대상 객체 생성의 기본 형식은 .csv 파일입니다. 다음 예는 S3 대상 객체 생성을 위한 형식으로 .parquet 파일을 지정하기 위한 몇 가지 엔드포인트 설정을 보여 줍니다. 다음 예에서처럼 .parquet 파일 형식을 모두 기본값으로 지정할 수 있습니다.

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'

여기서는 모든 S3 기본값으로 형식을 활성화하기 위해 DataFormat 파라미터가 parquet로 설정됩니다. 이러한 기본값에는 반복되는 값을 보다 효율적으로 저장하기 위해 비트 압축과 실행 길이 인코딩의 조합을 사용하는 사전식 인코딩("EncodingType: "rle-dictionary")이 포함됩니다.

다음 예에서처럼 기본값이 아닌 옵션의 추가 설정을 추가할 수 있습니다.

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "CompressionType": "GZIP", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000, "EnableStatistics": false }'

여기서 몇 가지 표준 S3 버킷 옵션의 파라미터와 DataFormat 파라미터 외에 다음의 추가 .parquet 파일 파라미터가 설정됩니다.

  • EncodingType – 사전 페이지의 열당 청크의 각 열에서 발생하는 값을 저장하는 사전식 인코딩(plain-dictionary)으로 설정됩니다.

  • DictPageSizeLimit – 사전 페이지 최대 크기인 3MB로 설정됩니다.

  • EnableStatistics – Parquet 파일 페이지와 행 그룹에 관한 통계 수집을 활성화하는 기본값을 비활성화합니다.

S3 대상의 트랜잭션 순서를 포함한 변경 데이터 캡처(CDC).

기본적으로 AWS DMS가 CDC 작업을 실행하면 소스 데이터베이스(또는 데이터베이스)에 기록된 모든 행 변경 내용이 각 테이블에 대해 하나 이상의 파일에 저장됩니다. 동일한 테이블에 대한 변경 내용을 포함하는 각 파일 세트는 해당 테이블과 연결된 단일 대상 디렉터리에 있습니다. AWS DMS는 Amazon S3 대상 엔드포인트로 마이그레이션된 데이터베이스 테이블 수만큼 대상 디렉터리를 생성합니다. 파일은 트랜잭션 순서에 관계없이 S3 대상의 이러한 디렉터리에 저장됩니다. 파일 명명 규칙, 데이터 내용 및 형식에 관한 자세한 내용은 Amazon S3를 AWS Database Migration Service의 대상으로 사용을 참조하십시오.

트랜잭션 순서도 캡처하는 방식으로 소스 데이터베이스 변경 사항을 캡처하려면 트랜잭션 크기에 따라 생성되는 하나 이상의 .csv 파일에 모든 데이터베이스 테이블의 행 변경 내용을 저장하도록 AWS DMS에 지시하는 S3 엔드포인트 설정을 지정할 수 있습니다. 이러한 .csv 트랜잭션 파일에는 각 트랜잭션과 관련된 모든 테이블에 대해 트랜잭션 순서대로 나열된 모든 행 변경 내용이 포함되어 있습니다. 이러한 트랜잭션 파일은 사용자가 S3 대상에서도 지정하는 단일 트랜잭션 디렉터리에 함께 있습니다. 각 트랜잭션 파일에서 트랜잭션 작업과 각 행 변경에 대한 데이터베이스 및 소스 테이블의 ID는 다음과 같이 행 데이터의 일부로 저장됩니다.

operation,table_name,database_schema_name,field_value,...

여기서 operation은 변경된 행의 트랜잭션 작업이고 table_name은 행이 변경된 데이터베이스 테이블의 이름이며 database_schema_name은 테이블이 있는 데이터베이스 스키마의 이름이고 field_value는 행의 데이터를 지정하는 하나 이상의 필드 값 중 첫 번째 필드 값입니다.

다음 트랜잭션 파일 예제는 두 테이블을 포함하는 하나 이상의 트랜잭션에 대해 변경된 행을 보여줍니다.

I,Names_03cdcad11a,rdsTempsdb,13,Daniel U,Names_03cdcad11a,rdsTempsdb,23,Kathy D,Names_03cdcad11a,rdsTempsdb,13,Cathy I,Names_6d152ce62d,rdsTempsdb,15,Jane I,Names_6d152ce62d,rdsTempsdb,24,Chris I,Names_03cdcad11a,rdsTempsdb,16,Mike

여기서 각 행의 트랜잭션 작업은 첫 번째 열에 I(삽입), U(업데이트) 또는 D(삭제)로 표시됩니다. 테이블 이름은 두 번째 열 값입니다(예:Names_03cdcad11a). 데이터베이스 스키마의 이름은 세 번째 열의 값입니다(예:rdsTempsdb). 그리고 나머지 열은 사용자 고유의 행 데이터(예:13,Daniel)로 채워집니다.

또한 AWS DMS는 다음 명명 규칙에 따라 타임스탬프를 사용하여 Amazon S3 대상에서 생성하는 트랜잭션 파일의 이름을 지정합니다.

CDC_TXN-timestamp.csv

여기서 timestamp는 다음 예와 같이 트랜잭션 파일이 생성된 시간입니다.

CDC_TXN-20201117153046033.csv

파일 이름의 이 타임스탬프를 사용하면 트랜잭션 디렉터리에 트랜잭션 파일을 나열할 때 트랜잭션 파일이 트랜잭션 순서대로 생성되고 나열됩니다.

참고

트랜잭션 순서대로 데이터 변경을 캡처할 때 AWS DMS는 대상의 DataFormat S3 설정 값에 관계없이 항상 행 변경 내용을 .csv 파일에 저장합니다. AWS DMS는 .parquet 파일을 사용하여 트랜잭션 순서대로 데이터 변경 사항을 저장하지 않습니다.

데이터 복제 작업 중에 Amazon S3 대상에 대한 쓰기 빈도를 제어하기 위해 CdcMaxBatchIntervalCdcMinFileSize 설정을 구성할 수 있습니다. 따라서 추가 오버헤드 작업 없이 데이터를 분석할 때 성능이 향상될 수 있습니다. 자세한 내용은 Amazon S3를 AWS DMS의 대상으로 사용 시 엔드포인트 설정 단원을 참조하십시오.

모든 행 변경 사항을 트랜잭션 순서대로 저장하도록 AWS DMS에 지시하려면
  1. 대상의 PreserveTransactions S3 설정을 true로 설정합니다.

  2. 대상의 CdcPath S3 설정을 AWS DMS가 .csv 트랜잭션 파일을 저장하려는 상대 폴더 경로로 설정합니다.

    AWS DMS는 기본 S3 대상 버킷 및 작업 디렉터리 아래 또는 대상의 BucketNameBucketFolder S3 설정을 사용하여 지정한 버킷 및 버킷 폴더 아래에 이 경로를 생성합니다.

마이그레이션된 S3 데이터에 소스 DB 작업 표시

AWS DMS가 S3 대상으로 레코드를 마이그레이션하면 마이그레이션된 각 레코드에 추가 필드를 만들 수 있습니다. 이 추가 필드는 소스 데이터베이스의 레코드에 적용된 작업을 나타냅니다. AWS DMS가 이 첫 번째 필드를 생성하고 설정하는 방법은 includeOpForFullLoad, cdcInsertsOnlycdcInsertsAndUpdates의 마이그레이션 작업 유형과 설정에 따라 달라집니다.

includeOpForFullLoadtrue인 전체 로드의 경우, AWS DMS는 항상 각 .csv 레코드에 첫 번째 추가 필드를 생성합니다. 이 필드에는 행이 소스 데이터베이스에 삽입되었음을 나타내는 문자 I(INSERT)가 들어 있습니다. cdcInsertsOnlyfalse(기본값)인 CDC 로드의 경우, AWS DMS는 항상 각 .csv 또는 .parquet 레코드에 첫 번째 필드를 추가로 만듭니다. 이 필드에는 소스 데이터베이스에서 행이 삽입, 업데이트 또는 삭제되었는지 여부를 나타내는 문자 I(INSERT), U(UPDATE) 또는 D(DELETE)가 포함됩니다.

다음 표에서 includeOpForFullLoadcdcInsertsOnly 속성의 설정들이 작용하여 마이그레이션된 레코드의 설정에 영향을 주는 것을 볼 수 있습니다.

이 파라미터 설정을 사용할 경우 DMS는 .csv 및 .parquet 출력에 다음과 같이 대상 레코드를 설정합니다.
includeOpForFullLoad cdcInsertsOnly 전체 로드 CDC 로드
true true 추가된 첫 번째 필드 값은 I로 설정 추가된 첫 번째 필드 값은 I로 설정
false false 추가된 필드 없음 추가된 첫 번째 필드 값은 I, U 또는 D로 설정
false true 추가된 필드 없음 추가된 필드 없음
true false 추가된 첫 번째 필드 값은 I로 설정 추가된 첫 번째 필드 값은 I, U 또는 D로 설정

includeOpForFullLoadcdcInsertsOnly가 같은 값으로 설정되면 대상 레코드는 현재 마이그레이션 유형에 대한 레코드 설정을 제어하는 속성에 따라 설정됩니다. 이 속성은 전체 로드의 경우 includeOpForFullLoad이고 CDC 로드의 경우 cdcInsertsOnly입니다.

includeOpForFullLoadcdcInsertsOnly가 서로 다른 값으로 설정되면 AWS DMS는 대상 레코드 설정을 CDC 및 전체 로드에 일관되게 만듭니다. 이를 위해 includeOpForFullLoad에서 이전에 지정한 전체 로드에 대한 레코드 설정에 부합하도록 CDC 로드에 대한 레코드 설정을 지정합니다.

즉, 삽입된 레코드를 나타내는 첫 번째 필드를 추가하도록 전체 로드가 설정되었다고 가정하십시오. 이 경우 다음 CDC 로드는 삽입, 업데이트 또는 삭제된 레코드가 소스에 적절함을 나타내는 첫 번째 필드를 추가하도록 설정됩니다. 이와 달리, 삽입된 레코드를 나타내는 첫 번째 필드를 추가하지 않도록 전체 로드가 설정된다고 가정하십시오. 이 경우 CDC 로드 역시, 소스에서의 해당 레코드 작업에 관계없이 각 레코드에 첫 번째 필드를 추가하지 않도록 설정됩니다.

마찬가지로 DMS가 첫 번째 추가 필드를 생성하고 설정하는 방법은 includeOpForFullLoadcdcInsertsAndUpdates의 설정에 따라 다릅니다. 다음 표에서 includeOpForFullLoadcdcInsertsAndUpdates 속성의 설정들이 작용하여 이 형식으로 마이그레이션된 레코드의 설정에 영향을 주는 것을 볼 수 있습니다.

이 파라미터 설정을 사용할 경우 DMS는 .csv 출력에 다음과 같이 대상 레코드를 설정합니다.
includeOpForFullLoad cdcInsertsAndUpdates 전체 로드 CDC 로드
true true 추가된 첫 번째 필드 값은 I로 설정 추가된 첫 번째 필드 값은 I 또는 U로 설정
false false 추가된 필드 없음 추가된 첫 번째 필드 값은 I, U 또는 D로 설정
false true 추가된 필드 없음 추가된 첫 번째 필드 값은 I 또는 U로 설정
true false 추가된 첫 번째 필드 값은 I로 설정 추가된 첫 번째 필드 값은 I, U 또는 D로 설정

S3 Parquet의 대상 데이터 유형

다음 테이블에서는 AWS DMS를 사용할 때 지원되는 Parquet 대상 데이터 형식과 AWS DMS 데이터 형식에 따른 기본 매핑을 보여줍니다.

AWS DMS 데이터 형식에 관한 추가 정보는 AWS Database Migration Service에서 사용되는 데이터 형식 단원을 참조하십시오.

AWS DMS 데이터 유형

S3 Parquet 데이터 형식

BYTES BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT64
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL