기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon S3 를 대상 으로 사용AWS Database Migration Service
지원되는 데이터베이스 소스 중 하나를 사용하여 AmazonAWS DMS S3로 데이터를 마이그레이션할 수 있습니다. Amazon S3를AWS DMS 작업의 대상으로 사용하면 기본적으로 전체 로드 및 변경 데이터 캡처 (CDC) 데이터가 모두 쉼표로 구분된 값 (.csv) 형식으로 기록됩니다. 보다 간소화된 스토리지 및 보다 빠른 쿼리 옵션을 위해 데이터를 Apache Parquet(.parquet) 형식에 작성할 수도 있습니다.
AWS DMS증분 16진수 카운터 (예: .csv 파일의 경우 LOAD00001.csv, LOAD00002..., LOAD00009, LOAD0000A 등) 를 사용하여 전체 로드 중에 만든 파일의 이름을 지정합니다. AWS DMS타임스탬프를 사용하여 CDC 파일의 이름을 지정합니다 (예: 20141029-1134010000.csv). 레코드가 포함된 각 원본 테이블에 대해 지정된 대상 폴더 아래에 폴더를AWS DMS 만듭니다 (원본 테이블이 비어 있지 않은 경우). AWS DMS지정된 Amazon S3 버킷에 전체 로드 파일과 CDC 파일을 씁니다.
파라미터 bucketFolder
에는 S3 버킷에 업로드되기 전에 .csv 또는 .parquet 파일이 저장되는 위치가 포함되어 있습니다. .csv 파일을 사용하면 테이블 데이터가 S3 버킷에 다음과 같은 형식으로 저장되며 전체 로드 파일과 함께 표시됩니다.
database_schema_name
/table_name
/LOAD00000001.csvdatabase_schema_name
/table_name
/LOAD00000002.csv ...database_schema_name
/table_name
/LOAD00000009.csvdatabase_schema_name
/table_name
/LOAD0000000A.csvdatabase_schema_name
/table_name
/LOAD0000000B.csv ...database_schema_name
/table_name
/LOAD0000000F.csvdatabase_schema_name
/table_name
/LOAD00000010.csv ...
추가 연결 속성을 사용하여 열 구분 기호, 행 구분 기호 등 여러 파라미터를 지정할 수 있습니다. 추가 연결 속성에 대한 자세한 내용은 이 섹션의 마지막에 나오는 Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS을 참조하십시오.
다음과 같이ExpectedBucketOwner
Amazon S3 엔드포인트 설정을 사용하여 버킷 소유자를 지정하고 스나이핑을 방지할 수 있습니다. 그런 다음 연결을 테스트하거나 마이그레이션을 수행하도록 요청하면 S3는 지정된 파라미터와 비교하여 버킷 소유자의 계정 ID를 확인합니다.
--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'
를 사용하여AWS DMS CDC 작업을 사용하여 데이터 변경 내용을 복제하는 경우.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 엔드포인트 설정을 사용하여 이 설정과 S3 대상에서 CDC 트랜잭션 파일을 저장할 폴더 경로를 지정해야 합니다. 자세한 정보는 S3 대상의 트랜잭션 순서를 포함한 데이터 변경 사항 캡처 (CDC)을 참조하세요.
데이터 복제 작업 중에 Amazon S3 대상에 대한 쓰기 빈도를 제어하려면cdcMaxBatchInterval
및cdcMinFileSize
추가 연결 속성을 구성할 수 있습니다. 따라서 추가 오버헤드 작업 없이 데이터를 분석할 때 성능이 향상될 수 있습니다. 자세한 내용은 Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS 단원을 참조하세요.
주제
- Amazon S3를 타겟으로 사용하기 위한 사전 요구 사항
- Amazon S3를 타겟으로 사용할 때의 제한
- 보안
- 아파치 파켓을 사용하여 Amazon S3 객체 저장
- Amazon S3 객체 태깅
- Amazon S3 대상 객체를 암호화하기 위한AWS KMS 키 생성
- 날짜 기반 폴더 파티셔닝 사용
- Amazon S3를 대상으로 사용할 때 분할된 소스의 병렬 로드AWS DMS
- Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS
- Amazon S3 타겟에서 데이터 암호화, 파켓 파일 및 CDC 사용
- 마이그레이션된 S3 데이터에 소스 DB 작업 표시
- S3 파켓의 대상 데이터 유형
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" ] } ] }
Amazon S3를 타겟으로 사용할 때의 제한
Amazon S3를 대상에 사용할 경우 다음과 같은 제한이 적용됩니다.
-
S3에 대한 버전 관리를 활성화하지 마십시오. S3 버전 관리가 필요한 경우 수명 주기 정책을 사용하여 이전 버전을 적극적으로 삭제하십시오. 그렇지 않으면 S3
list-object
호출 시간 초과로 인해 엔드포인트 테스트 연결이 실패할 수 있습니다. S3 버킷의 수명 주기 정책을 만들려면 스토리지 수명 주기 관리를 참조하십시오. S3 객체 버전을 삭제하려면 버전 관리를 사용하는 버킷에서 객체 버전 삭제를 참조하십시오. -
VPC 지원 (게이트웨이 VPC) S3 버킷은 버전 3.4.7 이상에서 지원됩니다.
-
변경 데이터 캡처 (CDC) 에는 테이블 자르기, 테이블 삭제, 테이블 만들기, 테이블 이름 바꾸기, 열 추가, 열 삭제, 열 이름 바꾸기 및 열 데이터 유형 변경과 같은 DDL (데이터 정의어) 명령이 지원됩니다.
참고 DDL 삭제 작업은 S3 버킷에서 파일 및 해당 테이블 폴더를 모두 제거합니다. 작업 설정을 사용하여 해당 동작을 비활성화하고 DMS가 변경 데이터 캡처 (CDC) 중에 DDL 동작을 처리하는 방식을 구성할 수 있습니다. 자세한 정보는 변경 처리 DDL을 다루기 위한 작업 설정을 참조하세요.
-
전체 LOB 모드는 지원되지 않습니다.
-
전체 로드 중에 원본 테이블의 구조 변경은 지원되지 않습니다. 데이터 변경은 전체 로드 중에 지원됩니다.
-
동일한 원본 테이블에서 동일한 대상 S3 엔드포인트 버킷으로 데이터를 복제하는 작업을 여러 번 수행하면 동일한 파일에 해당 작업을 쓰게 됩니다. 동일한 테이블의 데이터 원본인 경우 서로 다른 대상 엔드포인트(버킷)을 지정하는 것이 좋습니다.
-
BatchApply
S3 엔드포인트에서는 지원되지 않습니다. S3 대상에 Batch Apply (예:BatchApplyEnabled
대상 메타데이터 작업 설정) 를 사용하면 데이터가 손실될 수 있습니다. -
또는 는
DatePartitionEnabled
PreserveTransactions
또는 와addColumnName
함께 사용할 수 없습니다CdcPath
.
보안
Amazon S3를 대상으로 사용하려면 마이그레이션에 사용된 계정에 대상으로 사용되는 Amazon S3 버킷에 대한 쓰기 및 삭제 권한이 있어야 합니다. Amazon S3에 액세스하는 데 필요한 권한이 있는 IAM 역할의 Amazon 리소스 이름 (ARN) 을 지정합니다.
AWS DMS미리 제공된 ACL (액세스 제어 목록) 이라고 하는 Amazon S3에 대해 사전 정의된 권한 부여 집합을 지원합니다. 미리 준비된 각 ACL에는 Amazon S3 버킷에 대한 권한을 설정하는 데 사용할 수 있는 수혜자 및 권한 집합이 있습니다. S3 대상 엔드포인트에 대해 연결 문자열 속성에서 cannedAclForObjects
를 사용하여 미리 제공된 ACL을 지정할 수 있습니다. 추가 연결 속성 cannedAclForObjects
사용에 대한 자세한 내용은 Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS 단원을 참조하십시오. Amazon S3 미리 제공 ACL에 대한 자세한 내용을 알아보려면 미리 제공 ACL (미리 제공 ACL) 을 참조하세요.
마이그레이션에 사용하는 IAM 역할이 s3:PutObjectAcl
API 작업을 수행할 수 있어야 합니다.
아파치 파켓을 사용하여 Amazon S3 객체 저장
쉼표로 구분된 값 (.csv) 형식은 Amazon S3 대상 객체의 기본 스토리지 형식입니다. 보다 간소화된 스토리지와 보다 빠른 쿼리를 위해 Apache Parquet(.parquet)를 스토리지 형식으로 대신 사용할 수 있습니다.
Apache Parquet는 원래 하둡용으로 개발된 오픈 소스 파일 스토리지 형식입니다. Apache Parquet에 대한 자세한 내용은 https://parquet.apache.org/
.parquet를 마이그레이션된 S3 대상 객체의 스토리지 형식으로 설정하기 위해 다음 메커니즘을 사용할 수 있습니다.
-
AWS CLI 또는 AWS DMS API를 사용하여 엔드포인트를 생성할 때 JSON 객체의 파라미터로 제공하는 엔드포인트 설정. 자세한 정보는 Amazon S3 타겟에서 데이터 암호화, 파켓 파일 및 CDC 사용을 참조하세요.
-
엔드포인트를 생성할 때 세미콜론으로 구분된 목록으로 제공하는 추가 연결 속성. 자세한 정보는 Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS을 참조하세요.
Amazon S3 객체 태깅
작업 테이블 매핑 규칙의 일부로 적절한 JSON 객체를 지정하여 복제 인스턴스가 생성하는 Amazon S3 객체에 태그를 지정할 수 있습니다. 유효한 태그 이름을 비롯한 S3 객체 태깅의 요구 사항 및 옵션에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 객체 태깅을 참조하십시오. JSON을 사용한 테이블 매핑에 대한 자세한 내용은 JSON을 사용한 테이블 선택 및 변환 규칙 지정 단원을 참조하십시오.
selection
규칙 유형의 JSON 객체 하나 이상을 사용하여 지정된 테이블 및 스키마를 위해 생성된 S3 객체에 태깅합니다. 그런 다음 add-tag
작업을 사용하여 post-processing
규칙 유형의 JSON 객체 하나 이상으로 이 selection
객체(또는 객체들)를 따릅니다. 이러한 사후 처리 규칙은 태깅하려는 S3 객체를 식별하고 이러한 S3 객체에 추가하려는 태그의 이름과 값을 지정합니다.
다음 테이블의 post-processing
규칙 유형의 JSON 객체에서 지정할 파라미터를 찾을 수 있습니다.
파라미터 | 가능한 값 | 설명 |
---|---|---|
rule-type |
post-processing |
생성된 대상 객체에 사후 처리 작업을 적용하는 값입니다. 하나 이상의 사후 처리 규칙을 지정하여 선택한 S3 객체에 태깅할 수 있습니다. |
rule-id |
숫자 값. | 규칙을 식별하기 위한 고유한 숫자 값. |
rule-name |
영숫자 값입니다. | 규칙을 식별하기 위한 고유한 이름. |
rule-action |
add-tag |
S3 객체에 적용할 사후 처리 작업입니다. add-tag 작업의 단일 JSON 사후 처리 객체를 사용하여 하나 이상의 태그를 추가할 수 있습니다. |
object-locator |
|
규칙이 적용되는 각 스키마와 테이블의 이름입니다. 각
|
tag-set |
|
지정된
|
여러 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 객체는 스키마 이름이 aat2
인 STOCK
이라는 이름의 소스에 있는 단일 테이블에 상응합니다.
{ "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-name
과 dw-schema-table
) 및 해당 동적 값(${schema-name}
과 my_prefix_${table-name}
)을 대상에서 생성된 거의 모든 S3 객체에 추가합니다. 예외는 두 번째 사후 처리 규칙으로 식별되고 태깅된 S3 객체입니다. 따라서 와일드카드 객체 로케이터에 의해 식별된 각각의 S3 객체는 소스에서 상응하는 스키마와 테이블을 식별하는 태그를 사용하여 생성됩니다.
두 번째 사후 처리 규칙은 tag_1
및 tag_2
와 해당 정적 값 value_1
및 value_2
를 정확한 일치 객체 로케이터에 의해 식별되는 생성된 S3 객체에 추가합니다. 생성된 이 S3 객체는 따라서 스키마 이름이 aat
인 ITEM
이라는 이름의 소스에 있는 단일 테이블에 상응합니다. 정확한 일치로 인해 이러한 태그는 와일드카드만으로 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-name
및 dw-schema-table
)를 대상의 ITEM
테이블을 위해 생성된 모든 S3 객체에 추가합니다. 첫 번째 태그는 동적 값 "${schema-name}"
를 갖고 두 번째 태그는 정적 값 "my_prefix_ITEM"
을 갖습니다. 따라서 각각의 S3 객체는 소스에서 상응하는 스키마와 테이블을 식별하는 태그를 사용하여 생성됩니다.
또한 태그 세트는 동적 이름이 있는 2개의 태그(${schema-name}_ITEM_tag_1
및 "${schema-name}_ITEM_tag_2"
)를 추가합니다. 이러한 태그는 상응하는 정적 값 value_1
과 value_2
를 갖습니다. 따라서 이러한 태그는 각각 현재의 스키마 retail
또는 wholesale
에 대해 이름이 지정됩니다. 각 객체가 단일한 고유 스키마 이름을 위해 생성되기 때문에 이 객체에는 중복된 동적 태그를 생성할 수 없습니다. 이 스키마 이름은 다른 방식으로 고유한 태그 이름을 생성하는 데 사용됩니다.
Amazon S3 대상 객체를 암호화하기 위한AWS KMS 키 생성
Amazon S3 대상 객체를 암호화하는 사용자 지정AWS KMS 키를 생성하고 사용할 수 있습니다. KMS 키를 생성한 후 S3 대상 엔드포인트를 만들 때 다음 방법 중 하나로 이 키를 사용하여 객체를 암호화할 수 있습니다.
-
AWS CLI를 사용하여
create-endpoint
명령을 실행할 때 S3 객체에 다음 옵션(기본 .csv 파일 스토리지 형식으로)을 사용하십시오.--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
"}'여기서
은 KMS 키의 Amazon 리소스 이름(ARN)입니다. 자세한 정보는 Amazon S3 타겟에서 데이터 암호화, 파켓 파일 및 CDC 사용을 참조하세요.your-KMS-key-ARN
-
추가 연결 속성
encryptionMode
를 값SSE_KMS
로 설정하고, 추가 연결 속성serverSideEncryptionKmsKeyId
는 KMS 키의 ARN으로 설정합니다. 자세한 정보는 Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS을 참조하세요.
KMS 키를 사용하여 Amazon S3 대상 객체를 암호화하려면 Amazon S3 버킷에 액세스할 수 있는 권한이 있는 IAM 역할이 필요합니다. 그러면 생성한 암호화 키에 연결된 정책 (키 정책) 에서 이 IAM 역할에 액세스할 수 있습니다. IAM 콘솔에서 다음을 생성하여 추가가 가능합니다.
-
Amazon S3 버킷에 액세스할 수 있는 권한이 포함된 정책입니다.
-
이 정책의 IAM 역할.
-
이 역할을 참조하는 키 정책이 포함된 KMS 키 암호화 키입니다.
다음 절차에서 그 방법을 설명합니다.
Amazon S3 버킷에 액세스할 수 있는 권한이 포함된 IAM 정책을 생성하려면
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 정책을 선택합니다. 정책 페이지가 열립니다.
-
[정책 생성(Create policy)]을 선택합니다. 정책 생성 페이지가 열립니다.
-
서비스를 선택하고 S3를 선택합니다. 작업 권한 목록이 나타납니다.
-
모두 확장을 선택하여 목록을 확장하고 최소한 다음 권한을 선택합니다.
-
ListBucket
-
PutObject
-
DeleteObject
필요한 그 밖의 권한을 선택한 다음 모두 축소를 선택하여 목록을 축소합니다.
-
-
리소스를 선택하여 액세스하려는 리소스를 지정합니다. 최소한 모든 리소스를 선택하여 일반 Amazon S3 리소스 액세스를 제공하십시오.
-
필요한 그 밖의 조건 또는 권한을 추가한 다음 정책 검토를 선택합니다. 정책 검토 페이지에서 결과를 확인합니다.
-
필요한 설정이 되었다면 정책의 이름(예:
DMS-S3-endpoint-access
)과 추가 설명을 입력한 다음 정책 생성을 선택합니다. 정책이 생성되었다는 메시지와 함께 정책 페이지가 열립니다. -
정책 목록에서 정책 이름을 검색하고 선택합니다. 다음과 비슷한 정책의 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 역할을 생성하려면
-
IAM 콘솔의 탐색 창에서 역할을 선택합니다. 역할 세부 정보 페이지가 열립니다.
-
Create role(역할 생성)을 선택합니다. 역할 생성 페이지가 열립니다.
-
AWS서비스를 신뢰할 수 있는 엔티티로 선택한 상태에서 IAM 역할을 사용할 서비스로 DMS를 선택합니다.
-
다음: 권한(Next: Permissions)를 선택합니다. 권한 정책 연결 보기는 역할 만들기 페이지에 표시됩니다.
-
이전 절차(
DMS-S3-endpoint-access
)에서 생성한 IAM 역할에 대한 IAM 정책을 찾아 선택합니다. -
Next: Tags(다음: 태그)를 선택합니다. 태그 추가 보기는 역할 만들기 페이지에 나타납니다. 여기서 원하는 태그를 추가할 수 있습니다.
-
Next: Review(다음: 검토)를 선택합니다. 검토 보기는 역할 만들기 페이지에 나타납니다. 여기서 결과를 확인할 수 있습니다.
-
필요한 설정이 되었다면 역할의 이름(필수, 예를 들어
DMS-S3-endpoint-access-role
)과 추가 설명을 입력한 다음 역할 생성을 선택합니다. 역할이 생성되었다는 메시지와 함께 역할 세부 정보 페이지가 열립니다.
이제 지정된 이름으로 암호화를 위해 Amazon S3 리소스에 액세스할 수 있는 새 역할을 생성했습니다 (예:)DMS-S3-endpoint-access-role
.
IAM 역할을 참조하는 키 정책을 사용하여 KMS 키 암호화 키를 만들려면
AWS DMS에서 AWS KMS 암호화 키를 사용하는 방법에 대한 자세한 내용은 암호화 키 설정 및 AWS KMS 권한 지정 단원을 참조하십시오.
-
AWS Management Console에 로그인하고 https://console.aws.amazon.com/kms
에서 AWS Key Management Service(AWS KMS) 콘솔을 엽니다. -
AWS 리전을 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.
-
탐색 창에서 고객 관리형 키(Customer managed keys)를 선택합니다.
-
키 생성(Create key)을 선택합니다. Configure key(키 구성) 페이지가 열립니다.
-
키 유형에 대해 Symmetric(대칭)을 선택합니다.
참고 Amazon S3와 같은 모든AWS 서비스는 대칭 암호화 키로만 작동하므로 이 키를 생성할 때는 대칭 키만 생성할 수 있습니다.
-
[Advanced Options]를 선택합니다. Key material origin(키 구성 요소 오리진)에 KMS가 선택되어 있는지 확인하고 다음을 선택합니다. Add labels(레이블 추가) 페이지가 열립니다.
-
Create alias and description(별칭 및 설명 생성)에 키의 별칭(예:
DMS-S3-endpoint-encryption-key
)과 추가 설명을 입력합니다. -
태크에서 키 식별과 키 사용 추적에 도움이 되는 태그를 추가한 후 다음을 선택합니다. Define key administrative permissions(키 관리 권한 정의) 페이지가 열리고 선택할 수 있는 사용자 및 역할 목록이 표시됩니다.
-
키를 관리할 사용자와 역할을 추가합니다. 키를 관리하는 데 필요한 권한이 이러한 사용자와 역할에 있는지 확인합니다.
-
Key deletion(키 삭제)에서 키 관리자가 키를 삭제할 수 있는지 여부를 선택한 후 다음을 선택합니다. Define key usage permissions(키 사용 권한 정의) 페이지가 열리고 선택할 수 있는 추가 사용자 및 역할 목록이 표시됩니다.
-
이 계정의 경우 Amazon S3 대상에서 암호화 작업을 수행할 사용 가능한 사용자를 선택합니다. 또한 이전에 역할에서 생성한 역할을 선택하여 Amazon S3 대상 객체를 암호화하는 데 액세스할 수 있게 하십시오
DMS-S3-endpoint-access-role
(예:). -
목록에 없는 다른 계정을 추가하여 동일한 액세스 권한을 부여하려면 다른 AWS 계정에 대해 다른 AWS 계정 추가를 선택한 후 다음을 선택합니다. Review and edit key policy(키 정책 검토 및 편집) 페이지가 열리고 기존 JSON을 입력하여 검토하고 편집할 수 있는 키 정책 JSON이 표시됩니다. 여기서 키 정책이 이전 단계에서 선택한 역할 및 사용자(예:
Admin
및User1
)를 참조하는 위치를 확인할 수 있습니다. 다음 예제에 나온 것처럼 다양한 보안 주체(사용자 및 역할)에 허용되는 다양한 키 작업도 볼 수 있습니다.{ "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 } } } ]
-
[마침]을 클릭합니다. 암호화 키 페이지가 열리고 KMS 키가 생성되었다는 메시지가 표시됩니다.
이제 지정된 별칭의 새 KMS 키가 생성되었습니다(예: DMS-S3-endpoint-encryption-key
). 이 키를 사용하면 Amazon S3 대상 객체를AWS DMS 암호화할 수 있습니다.
날짜 기반 폴더 파티셔닝 사용
AWS DMSAmazon S3를 대상 엔드포인트로 사용하는 경우 트랜잭션 커밋 날짜를 기반으로 S3 폴더 파티션을 지원합니다. 날짜 기반 폴더 파티셔닝을 사용하면 단일 소스 테이블의 데이터를 S3 버킷의 시간 계층 폴더 구조에 쓸 수 있습니다. S3 대상 엔드포인트를 생성할 때 폴더를 파티셔닝하면 다음을 수행할 수 있습니다.
-
S3 객체를 더 잘 관리하세요
-
각 S3 폴더의 크기 제한
-
데이터 레이크 쿼리 또는 기타 후속 작업 최적화
S3 대상 엔드포인트를 생성할 때 날짜 기반 폴더 파티셔닝을 활성화할 수 있습니다. 기존 데이터를 마이그레이션하고 진행 중인 변경 사항을 복제 (전체 로드+CDC) 하거나 데이터 변경 사항만 복제 (CDC만 해당) 할 때 활성화할 수 있습니다. 다음 대상 엔드포인트 설정을 사용하십시오.
-
DatePartitionEnabled
— 날짜를 기준으로 파티셔닝을 지정합니다. 이 Boolean 옵션을true
설정하여 트랜잭션 커밋 날짜를 기준으로 S3 버킷 폴더를 파티셔닝합니다.이 설정은
PreserveTransactions
또는 과 함께 사용할 수 없습니다CdcPath
.기본값은
false
입니다. -
DatePartitionSequence
— 폴더 파티셔닝 중 사용할 날짜 형식의 순서를 식별합니다. 이 ENUM 옵션을YYYYMMDD
,,YYYYMMDDHH
YYYYMM
MMYYYYDD
, 또는 로 설정합니다DDMMYYYY
. 기본값은YYYYMMDD
입니다. 로 설정된 경우DatePartitionEnabled
이 설정을 사용하십시오.true.
-
DatePartitionDelimiter
— 폴더 파티셔닝 중 사용할 날짜 구분 기호를 지정합니다. 이 ENUM 옵션을SLASH
,DASH
UNDERSCORE
, 또는 로 설정합니다NONE
. 기본값은SLASH
입니다.DatePartitionEnabled
이true
으로 설정된 경우 이 설정을 사용합니다.
다음 예에서는 데이터 파티션 시퀀스의 기본값과 구분 기호를 사용하여 날짜 기반 폴더 파티셔닝을 활성화하는 방법을 보여줍니다. 의--s3-settings '{
옵션을 사용합니다AWS CLI. json-settings
}'create-endpoint
명령.
--s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'
Amazon S3를 대상으로 사용할 때 분할된 소스의 병렬 로드AWS DMS
분할된 데이터 소스를 Amazon S3 대상에 병렬로 전체 로드하도록 구성할 수 있습니다. 이 접근 방식은 지원되는 소스 데이터베이스 엔진에서 S3 타겟으로 분할된 데이터를 마이그레이션하는 로드 시간을 개선합니다. 분할된 소스 데이터의 로드 시간을 개선하려면 원본 데이터베이스에 있는 모든 테이블의 파티션에 매핑된 S3 대상 하위 폴더를 생성합니다. 이러한 파티션 바인딩 하위 폴더를 사용하면 parallel 프로세스를AWS DMS 실행하여 대상의 각 하위 폴더를 채울 수 있습니다.
S3 대상의 parallel 전체 로드를 구성하기 위해 S3는 테이블 매핑 규칙에 대해 세 가지parallel-load
table-settings
규칙 유형을 지원합니다.
partitions-auto
partitions-list
ranges
이러한 병렬 로드 규칙 유형에 대한 자세한 내용은 를 참조하세요테이블 및 컬렉션 설정 규칙 및 작업.
partitions-auto
및partitions-list
규칙 유형의 경우 소스 엔드포인트의 각 파티션 이름을AWS DMS 사용하여 다음과 같이 대상 하위 폴더 구조를 식별합니다.
bucket_name
/bucket_folder
/database_schema_name
/table_name
/partition_name
/LOADseq_num
.csv
여기서 데이터가 마이그레이션되어 S3 타겟에 저장되는
하위 폴더 경로에는 동일한 이름의 소스 파티션에 해당하는 추가 하위 폴더가 포함됩니다. 그러면 이partition_name
하위 폴더에는 지정된 소스 파티션에서 마이그레이션된 데이터가 들어 있는 하나 이상의partition_name
LOAD
파일이 저장됩니다. seq_num
.csv
여기서는 .csv 파일 이름의 시퀀스 번호 접미사 (예: 라는 이름의.csv 파일)seq_num
LOAD00000001.csv
입니다.00000001
그러나 MongoDB 및 DocumentDB와 같은 일부 데이터베이스 엔진에는 파티션 개념이 없습니다. 이러한 데이터베이스 엔진의 경우 다음과 같이 실행 중인 소스 세그먼트 인덱스를 대상.csv 파일 이름에 접두사로AWS DMS 추가합니다.
.../
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.csv
및SEGMENT1_LOAD00000002.csv
의 이름은 동일한 실행 소스 세그먼트 인덱스 접두사 를 사용하여SEGMENT1
지정됩니다. 이 두 개의.csv 파일에 대해 마이그레이션된 소스 데이터가 동일한 실행 소스 세그먼트 인덱스와 연결되어 있기 때문에 이름이 그렇게 지정되었습니다. 반면, 각 대상SEGMENT2_LOAD00000009.csv
및SEGMENT3_LOAD0000000A.csv
파일에 저장된 마이그레이션된 데이터는 서로 다른 실행 소스 세그먼트 인덱스와 연결됩니다. 각 파일의 파일 이름에는 실행 중인 세그먼트 인덱스 이름SEGMENT2
및 이 앞에SEGMENT3
붙습니다.
ranges
병렬 부하 유형의 경우table-settings
규칙의columns
및boundaries
설정을 사용하여 열 이름과 열 값을 정의합니다. 이러한 규칙을 사용하면 다음과 같이 세그먼트 이름에 해당하는 파티션을 지정할 수 있습니다.
"parallel-load": { "type": "ranges", "columns": [ "region", "sale" ], "boundaries": [ [ "NORTH", "1000" ], [ "WEST", "3000" ] ], "segment-names": [ "custom_segment1", "custom_segment2", "custom_segment3" ] }
여기서segment-names
설정은 S3 타겟에서 데이터를 병렬로 마이그레이션할 3개 파티션의 이름을 정의합니다. 마이그레이션된 데이터는 다음과 같이 병렬 로드되어 파티션 하위 폴더 아래의.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
여기서는 일련의 .csv 파일을 세 개의 파티션 하위 폴더 각각에AWS DMS 저장합니다. 각 파티션 하위 폴더에 있는 일련의 .csv 파일은 모든 데이터가LOAD00000001.csv
마이그레이션될 때까지 순차적으로 이름이 지정됩니다.
경우에 따라segment-names
설정을 사용하여ranges
병렬 로드 유형의 파티션 하위 폴더 이름을 명시적으로 지정하지 않을 수 있습니다. 이 경우
하위 폴더 아래에 각 시리즈의.csv 파일을 만드는 기본값을AWS DMS 적용합니다. 여기서는 다음과 같이 각.csv 파일 시리즈의 파일 이름 앞에 실행 중인 소스 세그먼트 인덱스의 이름을AWS DMS 접두사로 붙입니다.table_name
.../
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콘솔을 사용하거나 의create-endpoint
명령을 사용하여--s3-settings '{"
JSON 구문을 사용하여 대상 엔드포인트를 만들 때 설정을 지정합니다. AWS CLI EndpointSetting"
:
"value"
, ...
}'
다음 표에서는 Amazon S3와 함께 사용할 수 있는 엔드포인트 설정을 보여줍니다.
옵션 | 설명 |
---|---|
CsvNullValue |
AWS DMS가 null 값을 처리하는 방법을 지정하는 선택적 파라미터입니다. null 값을 처리하는 동안 이 파라미터를 사용하여 대상에 쓸 때 사용자 정의 문자열을 null로 전달할 수 있습니다. 예를 들어, 대상 열이 null을 허용하지 않는 경우 이 옵션을 사용하여 빈 문자열 값과 null 값을 구분할 수 있습니다. 따라서 이 파라미터 값을 빈 문자열 (” 또는 “) 로 설정하면 는 빈 문자열을 대신 null 값으로AWS DMS 처리합니다 기본값: 유효한 값: 유효한 문자열입니다. 예: |
AddColumnName |
이 매개 변수는 기본값: 유효한 값: 예: |
BucketFolder |
S3 버킷의 폴더 이름을 설정하는 선택적 파라미터입니다. 제공되는 경우, 대상 객체는 경로 예: |
BucketName |
S3 대상 객체가 .csv 또는 .parquet 파일로 생성되는 S3 버킷의 이름입니다. 예: |
CannedAclForObjects |
AWS DMS가 S3 버킷에서 .csv 또는 .parquet 파일로 생성되는 객체에 대한 사전 정의된(미리 제공된) 액세스 제어 목록을 지정할 수 있도록 하는 값입니다. Amazon S3 준비된 ACL에 대한 자세한 내용을 알아보려면 Amazon S3 Developer Guide(Amazon S3 개발자 안내서)의 Canned ACL(미리 제공 ACL)을 참조하세요. 기본값: NONE 이 속성의 유효한 값은 NONE; PRIVATE; PUBLIC_READ; PUBLIC_READ_WRITE; AUTHENTICATED_READ; AWS_EXEC_READ; BUCKET_OWNER_READ; BUCKET_OWNER_FULL_CONTROL입니다. 예: |
CdcInsertsOnly |
데이터 캡처 변경(CDC) 로드 중 쉼표로 구분된 값(.csv) 또는 컬럼 방식 스토리지(.parquet) 출력 파일에 INSERT 작업만을 작성하는 선택적 파라미터입니다. 기본적으로( .csv 형식의 경우에만 기본값: 유효한 값: 예: |
CdcInsertsAndUpdates |
변경 데이터 캡처(CDC) 로드를 사용하여 INSERT 및 UPDATE 작업을 .csv 또는 .parquet(열 기반 스토리지) 출력 파일에 기록할 수 있습니다. 기본 설정은 .csv 파일 형식의 경우에만 이러한 INSERT 및 UPDATE가 기록되는 방법이 이러한 파라미터가 상호 작용하는 방식에 대한 자세한 내용은 마이그레이션된 S3 데이터에 소스 DB 작업 표시 단원을 참조하십시오.
기본값: 유효한 값: 예: |
|
CDC 파일의 폴더 경로를 지정합니다. S3 소스의 경우 태스크가 변경 데이터를 캡처하는 경우 이 설정이 필요합니다. 그렇지 않으면 선택 사항입니다. 이 매개 변수는 유형: String 예를 들어 동일하게 이 설정은 AWS DMS 버전 3.4.2 이상에서 지원됩니다. 트랜잭션 순서대로 데이터 변경을 캡처할 때 DMS는 타겟의 DataFormat S3 설정 값에 관계없이 항상 행 변경 내용을 .csv 파일에 저장합니다. DMS는.parquet 파일을 사용하여 거래 순서대로 데이터 변경 사항을 저장하지 않습니다. |
|
파일을 Amazon S3에 출력하기 위한 최대 간격 길이 조건 (초) 입니다. 기본값: 60초
|
|
파일을 Amazon S3에 출력하기 위한 최소 파일 크기 조건 (킬로바이트 단위) 입니다. 기본값: 32000 킬로바이트
|
|
로 이 매개 변수는 유형: Boolean 트랜잭션 순서대로 데이터 변경을 캡처할 때 DMS는 타겟의 DataFormat S3 설정 값에 관계없이 항상 행 변경 내용을 .csv 파일에 저장합니다. DMS는.parquet 파일을 사용하여 거래 순서대로 데이터 변경 사항을 저장하지 않습니다. 이 설정은AWS DMS 버전 3.4.2 이상에서 지원됩니다. |
IncludeOpForFullLoad |
전체 로드 중 쉼표로 구분된 값(.csv) 출력 파일에만 INSERT 작업을 쓰기 위한 선택적 파라미터입니다. 전체 로드의 경우, 레코드는 삽입만 가능합니다. 기본적으로( 이 파라미터는 기본값: 유효한 값: 예: |
CompressionType |
기본값: 유효한 값: 예: |
CsvDelimiter |
.csv 소스 파일에서 열을 구분하는 데 사용되는 구분 기호입니다. 기본값은 쉼표(,)입니다. 예: |
CsvRowDelimiter |
.csv 소스 파일에서 행을 구분하는 데 사용되는 구분 기호입니다. 기본값은 줄 바꿈(\n)입니다. 예: |
|
전체 로드 중에 S3 대상으로 마이그레이션하는 동안 생성할 .csv 파일의 최대 크기(KB 단위)를 지정하는 값입니다. 기본값: 1,048,576KB(1GB) 유효한 값: 1—1,048,576 예: |
Rfc4180 |
.csv 파일 형식만 사용하여 Amazon S3로 마이그레이션되는 데이터의 RFC를 준수하도록 동작을 설정하는 데 사용되는 선택적 파라미터입니다. 이 값을 Amazon S3로 기본값: 유효한 값: 예: |
EncryptionMode |
S3로 복사되는 .csv 또는 .parquet 객체 파일을 암호화할 서버 측 암호화 모드입니다. 유효한 값은 CLI 기본값: 유효한 값: 예: |
ServerSideEncryptionKmsKeyId |
예: |
DataFormat |
AWS DMS가 S3 객체를 생성하는 데 사용하는 파일의 출력 형식입니다. Amazon S3 대상의 경우.csv 또는.parquet 파일을AWS DMS 지원합니다. .parquet 파일은 효율적인 압축 옵션과 보다 빠른 쿼리 성능을 갖춘 이진 컬럼 방식 스토리지 형식을 갖고 있습니다. .parquet 파일에 대한 자세한 내용은 https://parquet.apache.org/ 기본값: 유효한 값: 예: |
EncodingType |
Parquet 인코딩 유형입니다. 인코딩 유형 옵션에는 다음이 포함됩니다.
기본값: 유효한 값: 예: |
DictPageSizeLimit |
.parquet 파일에서 허용되는 사전 페이지의 최대 크기(바이트 단위)입니다. 사전 페이지가 이 값을 초과하면 해당 페이지는 일반 인코딩을 사용합니다. 기본값: 1,024,000(1MB) 유효한 값: 유효한 정수 값 예: |
RowGroupLength |
.parquet 파일의 한 행 그룹에 있는 행 수입니다. 기본값: 10,024(10KB) 유효한 값: 유효한 정수입니다. 예: |
DataPageSize |
.parquet 파일에서 허용되는 데이터 페이지의 최대 크기(바이트 단위)입니다. 기본값: 1,024,000(1MB) 유효한 값: 유효한 정수입니다. 예: |
ParquetVersion |
.parquet 파일 형식의 버전입니다. 기본값: 유효한 값: 예: |
EnableStatistics |
기본값: 유효한 값: 예: |
TimestampColumnName |
S3 대상 엔드포인트 데이터에 타임스탬프 열을 포함시키기 위한 선택적 파라미터입니다. AWS DMS비어 있지 않은 값으로 설정하면 전체 로드의 경우, 타임스탬프 열의 각 행에는 DMS에 의해 소스에서 대상으로 데이터가 전송된 시점에 대한 타임스탬프가 포함됩니다. CDC 로드의 경우, 타임스탬프 열의 각 행에는 소스 데이터베이스의 해당 행 커밋에 대한 타임스탬프가 있습니다. 이 타임스탬프 열 값의 문자열 형식은
예: |
UseTaskStartTimeForFullLoadTimestamp |
로
기본값: 유효한 값: 예:
|
ParquetTimestampInMillisecond |
.parquet 형식의 S3 객체에 기록된 모든 이 속성을 현재 Amazon Athena 및 AWS Glue는
기본값: 유효한 값: 예: |
Amazon S3 타겟에서 데이터 암호화, 파켓 파일 및 CDC 사용
S3 대상 엔드포인트 설정을 사용하여 다음을 구성할 수 있습니다.
-
S3 대상 객체를 암호화하는 사용자 지정 KMS 키입니다.
-
Parquet 파일은 S3 대상 객체의 스토리지 형식으로 사용됩니다.
-
S3 대상의 트랜잭션 순서를 포함한 데이터 캡처 (CDC) 를 변경합니다.
데이터 암호화를 위한 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_KMS
인 EncryptionMode
파라미터입니다. 다른 하나는 값이 arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480
인 ServerSideEncryptionKmsKeyId
파라미터입니다. 이 값은 사용자 지정 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 서버 측 암호화 작업에 대한 자세한 내용은 서버 측 암호화를 사용하여 데이터 보호 단원을 참조하십시오.
CLImodify-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)
기본적으로 CDC 작업을AWS DMS 실행하면 원본 데이터베이스 (또는 데이터베이스) 에 기록된 모든 행 변경 내용이 각 테이블의 하나 이상의 파일에 저장됩니다. 동일한 테이블에 대한 변경 내용이 포함된 각 파일 집합은 해당 테이블과 연결된 단일 대상 디렉터리에 있습니다. AWS DMSAmazon 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
파일 이름에 있는 이 타임스탬프는 트랜잭션 파일을 트랜잭션 디렉터리에 나열할 때 트랜잭션 파일이 생성되고 트랜잭션 순서대로 나열되도록 합니다.
트랜잭션 순서대로 데이터 변경을 캡처할 때는 타겟의DataFormat
S3 설정 값에 관계없이AWS DMS 항상 행 변경 내용을 .csv 파일에 저장합니다. AWS DMS.parquet 파일을 사용하여 트랜잭션 순서대로 데이터 변경 사항을 저장하지 않습니다.
데이터 복제 작업 중에 Amazon S3 대상에 대한 쓰기 빈도를 제어하려면CdcMaxBatchInterval
및CdcMinFileSize
설정을 구성할 수 있습니다. 따라서 추가 오버헤드 작업 없이 데이터를 분석할 때 성능이 향상될 수 있습니다. 자세한 내용은 Amazon S3를 대상으로 사용하는 경우의 엔드포인트 설정AWS DMS 단원을 참조하세요.
모든 행 변경 사항을 트랜잭션 순서대로AWS DMS 저장하도록 지시하려면
-
타겟의
PreserveTransactions
S3 설정을 로 설정합니다true
. -
대상의
CdcPath
S3 설정을.csv 트랜잭션 파일을AWS DMS 저장하려는 상대 폴더 경로로 설정합니다.AWS DMS기본 S3 타겟 버킷 및 작업 디렉터리 또는 타겟의 및
BucketFolder
S3 설정을 사용하여 지정한 버킷BucketName
및 버킷 폴더 아래에 이 경로를 생성합니다.
마이그레이션된 S3 데이터에 소스 DB 작업 표시
AWS DMS가 S3 대상으로 레코드를 마이그레이션하면 마이그레이션된 각 레코드에 추가 필드를 만들 수 있습니다. 이 추가 필드는 소스 데이터베이스의 레코드에 적용된 작업을 나타냅니다. 이 첫 번째 필드를AWS DMS 만들고 설정하는 방법은 마이그레이션 작업 유형 및includeOpForFullLoad
cdcInsertsOnly
, 및 설정에 따라 달라집니다cdcInsertsAndUpdates
.
최대 로드의true
경우includeOpForFullLoad
AWS DMS 항상 각.csv 레코드에 첫 번째 필드를 하나 더 생성합니다. 이 필드에는 행이 소스 데이터베이스에 삽입되었음을 나타내는 문자 I(INSERT)가 들어 있습니다. CDC 부하의 경우false
(기본값)cdcInsertsOnly
은 항상 각.csvAWS DMS 또는.parquet 레코드에 첫 번째 필드를 추가로 생성합니다. 이 필드에는 원본 데이터베이스에서 행이 삽입, 업데이트 또는 삭제되었는지 여부를 나타내는 문자 I(INSERT), U(UPDATE) 또는 D(DELETE)가 포함됩니다.
다음 테이블에서는includeOpForFullLoad
및cdcInsertsOnly
속성의 설정이 함께 작용하여 마이그레이션된 레코드의 설정에 어떻게 영향을 미치는지 확인할 수 있습니다.
이 파라미터 설정을 사용할 경우 | DMS는.csv 및.parquet 출력에 대해 다음과 같이 대상 레코드를 설정합니다. | ||
---|---|---|---|
includeOpForFullLoad | cdcInsertsOnly | 전체 로드 | CDC 로드 |
true |
true |
추가된 첫 번째 필드 값은 I 로 설정 |
추가된 첫 번째 필드 값은 I 로 설정 |
false |
false |
추가된 필드 없음 | 추가된 첫 번째 필드 값은 I , U 또는 D 로 설정 |
false |
true |
추가된 필드 없음 | 추가된 필드 없음 |
true |
false |
추가된 첫 번째 필드 값은 I 로 설정 |
추가된 첫 번째 필드 값은 I , U 또는 D 로 설정 |
includeOpForFullLoad
및 cdcInsertsOnly
가 같은 값으로 설정되면 대상 레코드는 현재 마이그레이션 유형에 대한 레코드 설정을 제어하는 속성에 따라 설정됩니다. 이 속성은 전체 로드의 경우 includeOpForFullLoad
이고 CDC 로드의 경우 cdcInsertsOnly
입니다.
includeOpForFullLoad
와 cdcInsertsOnly
가 서로 다른 값으로 설정되면 AWS DMS는 대상 레코드 설정을 CDC 및 전체 로드에 일관되게 만듭니다. 이를 위해 includeOpForFullLoad
에서 이전에 지정한 전체 로드에 대한 레코드 설정에 부합하도록 CDC 로드에 대한 레코드 설정을 지정합니다.
즉, 삽입된 레코드를 나타내는 첫 번째 필드를 추가하도록 전체 로드가 설정되었다고 가정하십시오. 이 경우 다음 CDC 로드는 삽입, 업데이트 또는 삭제된 레코드가 소스에 적절함을 나타내는 첫 번째 필드를 추가하도록 설정됩니다. 이와 달리, 삽입된 레코드를 나타내는 첫 번째 필드를 추가하지 않도록 전체 로드가 설정된다고 가정하십시오. 이 경우 CDC 로드 역시, 소스에서의 해당 레코드 작업에 관계없이 각 레코드에 첫 번째 필드를 추가하지 않도록 설정됩니다.
마찬가지로 DMS가 첫 번째 추가 필드를 생성하고 설정하는 방법은 includeOpForFullLoad
및 cdcInsertsAndUpdates
의 설정에 따라 다릅니다. 다음 표에서 includeOpForFullLoad
및 cdcInsertsAndUpdates
속성의 설정들이 작용하여 이 형식으로 마이그레이션된 레코드의 설정에 영향을 주는 것을 볼 수 있습니다.
이 파라미터 설정을 사용할 경우 | DMS는 .csv 출력에 다음과 같이 대상 레코드를 설정합니다. | ||
---|---|---|---|
includeOpForFullLoad | cdcInsertsAnd업데이트 | 전체 로드 | CDC 로드 |
true |
true |
추가된 첫 번째 필드 값은 I 로 설정 |
추가된 첫 번째 필드 값은 I 또는 U 로 설정 |
false |
false |
추가된 필드 없음 | 추가된 첫 번째 필드 값은 I , U 또는 D 로 설정 |
false |
true |
추가된 필드 없음 | 추가된 첫 번째 필드 값은 I 또는 U 로 설정 |
true |
false |
추가된 첫 번째 필드 값은 I 로 설정 |
추가된 첫 번째 필드 값은 I , U 또는 D 로 설정 |
S3 파켓의 대상 데이터 유형
다음 표는 데이터 유형을 사용할AWS DMS 때 지원되는 Parquet 대상 데이터 유형과AWS DMS 데이터 유형의 기본 매핑을 보여줍니다.
AWS DMS 데이터 형식에 대한 추가 정보는 AWSDatabase Migration Service 데이터 유형 단원을 참조하십시오.
AWS DMS 데이터 형식 |
S3 마루 데이터 유형 |
---|---|
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 |