기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon S3를 타겟으로 사용 AWS Database Migration Service
지원되는 데이터베이스 소스 중 하나를 사용하여 AWS DMS Amazon 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 모든 전체 로드 및 CDC 파일을 지정된 Amazon S3 버킷에 씁니다. MaxFileSize엔드포인트 설정을 사용하여 AWS DMS 생성하는 파일의 크기를 제어할 수 있습니다.
파라미터 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"}'
를 사용하여 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 대상에 대한 쓰기 빈도를 제어하기 위해 cdcMaxBatchInterval
및 cdcMinFileSize
추가 연결 속성을 구성할 수 있습니다. 따라서 추가 오버헤드 작업 없이 데이터를 분석할 때 성능이 향상될 수 있습니다. 자세한 정보는 Amazon S3를 대상으로 사용할 때의 엔드포인트 설정 AWS DMS섹션을 참조하십시오.
주제
- Amazon S3를 대상으로 사용하기 위한 사전 조건
- Amazon S3를 대상으로 사용할 때 적용되는 제한 사항
- 보안
- Apache Parquet를 사용하여 Amazon S3 객체 저장
- Amazon S3 객체 태그 지정
- Amazon S3 대상 객체를 암호화하기 위한 AWS KMS 키 생성
- 날짜 기반 폴더 파티셔닝 사용
- Amazon S3를 대상으로 사용할 때 파티셔닝된 소스의 병렬 로드 AWS DMS
- Amazon S3를 대상으로 사용할 때의 엔드포인트 설정 AWS DMS
- Amazon S3 AWS Glue Data Catalog 타겟과 함께 사용 AWS DMS
- Amazon S3 대상에서 데이터 암호화, parquet 파일 및 CDC 사용
- 마이그레이션된 S3 데이터에 소스 DB 작업 표시
- S3 Parquet의 대상 데이터 유형
Amazon S3를 대상으로 사용하기 위한 사전 조건
Amazon S3를 대상으로 사용하기 전에 다음 사항이 참인지 확인하십시오.
-
대상으로 사용하는 S3 버킷은 데이터를 마이그레이션하는 데 사용하는 DMS 복제 인스턴스와 동일한 AWS 지역에 있습니다.
-
마이그레이션에 사용하는 AWS 계정에는 대상으로 사용 중인 S3 버킷에 대한 쓰기 및 삭제 권한이 있는 IAM 역할이 있습니다.
-
이 역할에는 태그 지정 액세스 권한이 있으므로 대상 버킷에 작성되는 S3 객체에 태그를 지정할 수 있습니다.
-
IAM 역할에는 DMS(dms.amazonaws.com)가 신뢰할 수 있는 엔터티로 추가되었습니다.
AWS DMS 버전 3.4.7 이상에서는 DMS가 VPC 엔드포인트 또는 공개 경로를 통해 원본 버킷에 액세스해야 합니다. VPC 엔드포인트에 대한 자세한 내용은 을 참조하십시오. VPC 엔드포인트를 AWS DMS 소스 및 대상 엔드포인트로 구성
이 계정의 액세스 권한을 설정하려면 마이그레이션 작업 생성에 사용되는 사용자 계정에 할당된 역할에 다음 권한 집합이 있어야 합니다.
{ "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
또는addColumnName
를PreserveTransactions
또는CdcPath
와 함께 사용할 수 없습니다. -
AWS DMS 변환 규칙을 사용하여 여러 원본 테이블의 이름을 동일한 대상 폴더로 바꾸는 것을 지원하지 않습니다.
-
전체 로드 단계에서 소스 테이블에 많은 양의 쓰기가 있는 경우 DMS는 S3 버킷이나 캐시된 변경 사항에 중복 레코드를 쓸 수 있습니다.
-
TargetTablePrepMode
가DO_NOTHING
인 작업을 구성하면 전체 로드 단계에서 작업이 갑자기 중지되었다가 재개되는 경우 DMS가 S3 버킷에 중복 레코드를 쓸 수 있습니다. -
PreserveTransactions
를true
로 설정하여 대상 엔드포인트를 구성하는 경우 테이블을 다시 로드해도 이전에 생성된 CDC 파일은 지워지지 않습니다. 자세한 정보는 S3 대상의 트랜잭션 순서를 포함한 변경 데이터 캡처(CDC).을 참조하세요.
S3를 대상으로 하는 검증을 사용하기 위한 사전 요구 사항은 S3 대상 검증 사용에 대한 제한 사항를 참조하십시오.
보안
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 단원을 참조하십시오.
마이그레이션에 사용하는 IAM 역할이 s3:PutObjectAcl
API 작업을 수행할 수 있어야 합니다.
Apache Parquet를 사용하여 Amazon S3 객체 저장
쉼표로 구분된 값(.csv) 형식이 Amazon S3 대상 객체의 기본 스토리지 형식입니다. 보다 간소화된 스토리지와 보다 빠른 쿼리를 위해 Apache Parquet(.parquet)를 스토리지 형식으로 대신 사용할 수 있습니다.
Apache Parquet는 원래 하둡용으로 개발된 오픈 소스 파일 스토리지 형식입니다. Apache Parquet에 관한 자세한 내용은 https://parquet.apache.org/
.parquet를 마이그레이션된 S3 대상 객체의 스토리지 형식으로 설정하기 위해 다음 메커니즘을 사용할 수 있습니다.
-
AWS CLI 또는 API for AWS DMS를 사용하여 엔드포인트를 생성할 때 JSON 객체의 파라미터로 제공하는 엔드포인트 설정. 자세한 정보는 Amazon S3 대상에서 데이터 암호화, parquet 파일 및 CDC 사용을 참조하세요.
-
엔드포인트를 생성할 때 세미콜론으로 구분된 목록으로 제공하는 추가 연결 속성. 자세한 정보는 Amazon S3를 대상으로 사용할 때의 엔드포인트 설정 AWS DMS을 참조하세요.
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 객체에 지정할 파라미터를 찾을 수 있습니다.
파라미터 | 가능한 값 | 설명 |
---|---|---|
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 키 생성
사용자 지정 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
"}'여기서
은 KMS 키의 Amazon 리소스 이름(ARN)입니다. 자세한 정보는 Amazon S3 대상에서 데이터 암호화, parquet 파일 및 CDC 사용을 참조하세요.your-KMS-key-ARN
-
추가 연결 속성
encryptionMode
를 값SSE_KMS
로 설정하고, 추가 연결 속성serverSideEncryptionKmsKeyId
는 KMS 키의 ARN으로 설정합니다. 자세한 정보는 Amazon S3를 대상으로 사용할 때의 엔드포인트 설정 AWS DMS을 참조하세요.
KMS 키를 사용하여 Amazon S3 대상 객체를 암호화하려면 S3 버킷에 액세스할 권한이 있는 IAM 역할이 필요합니다. 그러면 생성한 암호화 키에 연결된 정책(키 정책)에서 이 IAM 역할에 액세스합니다. 이 작업은 IAM 콘솔에서 다음을 생성하여 수행할 수 있습니다.
-
Amazon S3 버킷에 액세스할 권한이 있는 정책.
-
이 정책이 있는 IAM 역할.
-
이 역할을 참조하는 키 정책이 있는 KMS 키 암호화 키.
다음 절차에서 그 방법을 설명합니다.
Amazon S3 버킷에 액세스할 권한이 있는 IAM 정책을 생성하려면
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
탐색 창에서 정책을 선택합니다. 정책 페이지가 열립니다.
-
정책 생성을 선택합니다. 정책 생성 페이지가 열립니다.
-
서비스를 선택하고 S3를 선택합니다. 작업 권한 목록이 나타납니다.
-
모두 확장을 선택하여 목록을 확장하고 최소한 다음 권한을 선택합니다.
-
ListBucket
-
PutObject
-
DeleteObject
필요한 그 밖의 권한을 선택한 다음 모두 축소를 선택하여 목록을 축소합니다.
-
-
리소스를 선택하여 액세스하려는 리소스를 지정합니다. 최소한 모든 리소스를 선택하여 일반적인 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 콘솔의 탐색 창에서 역할을 선택합니다. 역할 세부 정보 페이지가 열립니다.
-
역할 생성을 선택합니다. 역할 생성 페이지가 열립니다.
-
AWS 서비스를 신뢰할 수 있는 개체로 선택한 상태에서 IAM 역할을 사용할 서비스로 DMS를 선택하십시오.
-
다음: 권한을 선택합니다. 권한 정책 연결 뷰는 역할 생성 페이지에 표시됩니다.
-
이전 절차(
DMS-S3-endpoint-access
)에서 생성한 IAM 역할에 대한 IAM 정책을 찾아 선택합니다. -
다음: 태그를 선택합니다. 태그 추가 뷰는 역할 생성 페이지에 나타납니다. 여기서 원하는 태그를 추가할 수 있습니다.
-
다음: 검토를 선택합니다. 검토 뷰는 역할 생성 페이지에 나타납니다. 여기서 결과를 확인할 수 있습니다.
-
필요한 설정이 되었다면 역할의 이름(필수, 예를 들어
DMS-S3-endpoint-access-role
)과 추가 설명을 입력한 다음, 역할 생성을 선택합니다. 역할이 생성되었다는 메시지와 함께 역할 세부 정보 페이지가 열립니다.
이제 암호화를 위해 Amazon S3 리소스에 액세스할 수 있는 지정된 이름의 새 역할이 생성되었습니다(예: DMS-S3-endpoint-access-role
).
IAM 역할을 참조하는 키 정책이 있는 KMS 키 암호화 키를 생성하려면
참고
AWS KMS 암호화 키 사용 방법에 AWS DMS 대한 자세한 내용은 을 참조하십시오. 암호화 키 설정 및 권한 지정 AWS KMS
-
https://console.aws.amazon.com/kms
에서 AWS Management Console 로그인하고 AWS Key Management Service (AWS KMS) 콘솔을 엽니다. -
를 변경하려면 페이지 오른쪽 상단의 지역 선택기를 사용하십시오. AWS 리전
-
탐색 창에서 고객 관리형 키를 선택합니다.
-
키 생성을 선택합니다. 키 구성 페이지가 열립니다.
-
키 유형에 대해 대칭을 선택합니다.
참고
Amazon S3와 같은 모든 AWS 서비스가 대칭 암호화 키로만 작동하기 때문에 이 키를 생성할 때는 대칭 키만 생성할 수 있습니다.
-
[Advanced Options]를 선택합니다. 키 구성 요소 오리진에 KMS가 선택되어 있는지 확인하고 다음을 선택합니다. 레이블 추가 페이지가 열립니다.
-
별칭 및 설명 생성에 키의 별칭(예:
DMS-S3-endpoint-encryption-key
)과 추가 설명을 입력합니다. -
태그에서 키 식별과 키 사용 추적에 도움이 되는 태그를 추가한 후 다음을 선택합니다. 키 관리 권한 정의 페이지가 열리고 선택할 수 있는 사용자 및 역할 목록이 표시됩니다.
-
키를 관리할 사용자와 역할을 추가합니다. 키를 관리하는 데 필요한 권한이 이러한 사용자와 역할에 있는지 확인합니다.
-
키 삭제에서 키 관리자가 키를 삭제할 수 있는지 여부를 선택한 후 다음을 선택합니다. 키 사용 권한 정의 페이지가 열리고 선택할 수 있는 추가 사용자 및 역할 목록이 표시됩니다.
-
이 계정의 Amazon S3 대상에 대해 암호화 작업을 수행할 사용자를 선택합니다. 또한 이전에 역할에서 생성한 역할을 선택하여 Amazon S3 대상 객체 암호화를 위한 액세스를 활성화합니다(예:
DMS-S3-endpoint-access-role
). -
동일한 액세스 권한을 갖도록 목록에 없는 다른 계정을 추가하려면 기타 AWS 계정에서 다른 AWS 계정 추가를 선택한 후 다음을 선택합니다. 키 정책 검토 및 편집 페이지가 열리고 기존 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 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
입니다.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 대상의 병렬 전체 로드를 구성하기 위해 S3는 테이블 매핑의 table-settings
규칙에 대해 세 가지 parallel-load
규칙 유형을 지원합니다.
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 대상에서 데이터를 병렬로 마이그레이션하기 위한 세 개의 파티션 이름을 정의합니다. 마이그레이션된 데이터는 다음과 같이 병렬로 로드되어 파티션 하위 폴더 아래의 .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 적용합니다.
여기서 AWS DMS 는 다음과 같이 일련의 .csv 파일의 s파일 이름 앞에 실행 중인 소스 세그먼트 인덱스의 이름을 접두사로 붙입니다.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 |
null 값을 AWS DMS 처리하는 방법을 지정하는 선택적 파라미터입니다. null 값을 처리하는 동안 이 파라미터를 사용하여 대상에 쓸 때 사용자 정의 문자열을 null로 전달할 수 있습니다. 예를 들어, 대상 열이 null을 허용하는 경우, 이 옵션을 사용하여 빈 문자열 값과 null 값을 구분할 수 있습니다. 따라서 이 매개 변수 값을 빈 문자열 (” "또는 “) 로 설정하면 빈 문자열을 대신 null 값으로 AWS DMS 취급합니다. 기본 값: 유효값: 모든 유효한 문자열 예제: |
AddColumnName |
이 파라미터는 기본 값: 유효값: 예제: |
AddTrailingPaddingCharacter |
S3 대상 엔드포인트 설정 타입: 부울 예제: |
BucketFolder |
S3 버킷의 폴더 이름을 설정하는 선택적 파라미터입니다. 제공되는 경우, 대상 객체는 경로 예제: |
BucketName |
S3 대상 객체가 .csv 또는 .parquet 파일로 생성되는 S3 버킷의 이름입니다. 예제: |
CannedAclForObjects |
S3 AWS DMS 버킷에 생성된 객체에 대해 미리 정의된 (미리 준비된) 액세스 제어 목록을.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입니다. 예제: |
CdcInsertsOnly |
변경 데이터 캡처(CDC) 로드 중 쉼표로 구분된 값(.csv) 또는 컬럼 방식 스토리지(.parquet) 출력 파일에 INSERT 작업만을 작성하는 선택적 파라미터입니다. 기본적으로( .csv 형식의 경우에만 기본 값: 유효값: 예제: |
CdcInsertsAndUpdates |
변경 데이터 캡처(CDC) 로드를 사용하여 INSERT 및 UPDATE 작업을 .csv 또는 .parquet(열 기반 스토리지) 출력 파일에 기록할 수 있습니다. 기본 설정은 .csv 파일 형식의 경우에만 이러한 INSERT 및 UPDATE가 기록되는 방법이 이러한 파라미터가 상호 작용하는 방식에 관한 자세한 내용은 마이그레이션된 S3 데이터에 소스 DB 작업 표시 단원을 참조하십시오. 참고
기본 값: 유효값: 예제: |
|
CDC 파일의 폴더 경로를 지정합니다. S3 소스의 경우, 태스크가 변경 데이터를 캡처하는 경우 이 설정이 필요합니다. 그렇지 않으면 선택 사항입니다. 이 파라미터는 타입: 문자열 예를 들어, 동일한 참고이 설정은 버전 3.4.2 이상에서 지원됩니다. AWS DMS 트랜잭션 순서대로 데이터 변경을 캡처할 때 DMS는 대상의 DataFormat S3 설정 값에 관계없이 항상 행 변경 사항을.csv 파일에 저장합니다. DMS는 .parquet 파일을 사용하여 데이터 변경 사항을 트랜잭션 순서대로 저장하지 않습니다. |
|
파일을 Amazon S3에 출력할 때까지의 최대 간격(초)입니다. 기본값: 60초
|
|
Amazon S3에 파일을 출력하기 위한 최소 파일 크기 조건(단위: 킬로바이트[KB]) 기본값: 32000 KB
|
|
이 파라미터는 타입: 부울 데이터 변경을 트랜잭션 순서대로 캡처할 때 DMS는 대상의 S3 설정 값에 관계없이 항상 행 변경 사항을.csv 파일에 저장합니다. DataFormat 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 |
S3 객체를 생성하는 데 AWS DMS 사용하는 파일의 출력 형식입니다. 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 수 있습니다. 참고
기본 값: 유효값: 예제: |
GlueCatalogGeneration |
를 생성하려면 이 엔드포인트 설정을 로 AWS Glue Data Catalog설정합니다. 기본 값: 유효값: 예제: 참고: |
Amazon S3 AWS Glue Data Catalog 타겟과 함께 사용 AWS DMS
AWS Glue 데이터를 분류하는 간단한 방법을 제공하는 서비스로서 AWS Glue Data Catalog, 로 알려진 메타데이터 리포지토리로 구성되어 있습니다. Amazon S3 대상 AWS Glue Data Catalog 엔드포인트와 통합하고 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
형식 데이터가 포함된 전체 부하 복제 작업의 경우, IncludeOpForFullLoad
를 true
로 설정합니다.
참고: GlueCatalogGeneration
을 PreserveTransactions
및 CdcPath
와 함께 사용하지 마십시오. 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 개발자 안내서의 구성 요소를 AWS Glue Data Catalog 참조하십시오.
Amazon S3 대상에서 데이터 암호화, parquet 파일 및 CDC 사용
S3 대상 엔드포인트 설정을 사용하여 다음을 구성할 수 있습니다.
-
S3 대상 객체를 암호화하기 위한 사용자 지정 KMS 키.
-
S3 대상 객체의 스토리지 형식인 parquet 파일
-
S3 대상의 트랜잭션 순서를 포함한 변경 데이터 캡처(CDC).
-
Amazon S3 대상 AWS Glue Data Catalog 엔드포인트와 통합하고 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_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 서버 측 암호화 작업에 관한 자세한 내용은 서버 측 암호화를 사용하여 데이터 보호 단원을 참조하십시오.
참고
또한 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).
기본적으로 CDC 작업을 AWS DMS 실행하면 원본 데이터베이스 (또는 데이터베이스) 에 기록된 모든 행 변경 내용이 각 테이블에 대해 하나 이상의 파일에 저장됩니다. 동일한 테이블에 대한 변경 내용을 포함하는 각 파일 세트는 해당 테이블과 연결된 단일 대상 디렉터리에 있습니다. 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
파일 이름의 이 타임스탬프를 사용하면 트랜잭션 디렉터리에 트랜잭션 파일을 나열할 때 트랜잭션 파일이 트랜잭션 순서대로 생성되고 나열됩니다.
참고
트랜잭션 순서대로 데이터 변경을 캡처할 때는 대상의 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 작업 표시
레코드를 S3 대상으로 AWS DMS 마이그레이션할 때 마이그레이션된 각 레코드에 추가 필드를 생성할 수 있습니다. 이 추가 필드는 소스 데이터베이스의 레코드에 적용된 작업을 나타냅니다. 이 첫 번째 필드를 AWS DMS 생성하고 설정하는 방법은 includeOpForFullLoad
cdcInsertsOnly
, 및 의 마이그레이션 작업 유형 및 설정에 따라 다릅니다. cdcInsertsAndUpdates
includeOpForFullLoad
가 true
인 전체 로드의 경우, AWS DMS 는 항상 각 .csv 레코드에 첫 번째 추가 필드를 생성합니다. 이 필드에는 행이 소스 데이터베이스에 삽입되었음을 나타내는 문자 I(INSERT)가 들어 있습니다. CDC 로드의 경우 cdcInsertsOnly
이 false
(기본값) 이면 항상 각.csv 또는.parquet 레코드에 첫 번째 필드를 추가로 생성합니다. AWS DMS 이 필드에는 소스 데이터베이스에서 행이 삽입, 업데이트 또는 삭제되었는지 여부를 나타내는 문자 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
와 를 서로 다른 값으로 설정하면 CDC와 전체 AWS DMS 로드에 대한 대상 레코드 설정이 cdcInsertsOnly
일관됩니다. 이를 위해 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 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 |