AWS Database Migration Service
사용 설명서 (버전 API Version 2016-01-01)

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

지원되는 데이터베이스 소스에서 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는 지정된 Amazon S3 버킷에 모든 전체 로드와 CDC 파일을 작성합니다.

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

<schema_name>/<table_name>/LOAD00000001.csv <schema_name>/<table_name>/LOAD00000002.csv ... <schema_name>/<table_name>/LOAD00000009.csv <schema_name>/<table_name>/LOAD0000000A.csv <schema_name>/<table_name>/LOAD0000000B.csv ... <schema_name>/<table_name>/LOAD0000000F.csv <schema_name>/<table_name>/LOAD00000010.csv ...

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

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 테이블에서 이 행이 어떻게 표시되었는지가 반영됩니다.

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

Amazon S3를 대상으로 사용하기 전에 다음을 확인합니다.

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

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

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

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

{ "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의 파일에 다음 제한 사항이 적용됩니다.

  • 지원되는 데이터 정의 언어(DDL) 명령은 TRUNCATE TABLE, DROP TABLE, and CREATE TABLE입니다.

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

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

  • 동일한 원본 테이블에서 동일한 대상 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 대상 객체의 스토리지 형식으로 설정하기 위해 다음 메커니즘을 사용할 수 있습니다.

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

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 명령을 실행할 때 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"}'

    여기서 your-KMS-key-ARN은 KMS 키의 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 Amazon S3를 AWS DMS 대상으로 사용할 경우 엔드포인트 설정 단원을 참조하십시오.

  • 추가 연결 속성 encryptionMode를 값 SSE_KMS로 설정하고, 추가 연결 속성 serverSideEncryptionKmsKeyId는 KMS 키의 ARN으로 설정합니다. 자세한 내용은 Amazon S3를 AWS DMS의 대상으로 사용 시 추가 연결 속성 단원을 참조하십시오.

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

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

  • 이 정책이 있는 IAM 역할.

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

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

Amazon S3 버킷에 액세스할 권한이 있는 IAM 정책을 생성하려면

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

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

  3. [Create policy]를 선택합니다. 정책 생성 페이지가 열립니다.

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

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

    • ListBucket

    • PutObject

    • DeleteObject

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

  6. 리소스를 선택하여 액세스하려는 리소스를 지정합니다. 최소한 All resource(모든 리소스)를 선택하여 일반적인 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": "*" } ] }

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

이 정책을 사용하여 IAM 역할을 생성하려면

  1. IAM 콘솔의 탐색 창에서 역할을 선택합니다. 역할 세부 정보 페이지가 열립니다.

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

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

  4. 다음: 권한(Next: Permissions)을 선택합니다. 역할 생성 페이지에 Attach permissions policies(권한 정책 연결) 보기가 나타납니다.

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

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

  7. [Next: Review]를 선택합니다. 역할 생성 페이지에 검토 보기가 나타납니다. 여기서 결과를 확인할 수 있습니다.

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

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

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

  1. IAM 콘솔의 탐색 창에서 암호화 키를 선택합니다.

    이 옵션에 처음 액세스하는 경우, AWS Key Management Service 소개가 표시되며 지금 시작을 선택하여 시작할 수 있습니다. 그렇지 않다면 암호화 키 페이지가 열립니다.

  2. [Create key]를 선택합니다. Create Alias and Description(별칭 생성 및 설명) 페이지가 열립니다.

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

  4. [Advanced Options]를 선택합니다. 고급 옵션 섹션에서 Key Material Origin(키 구성 요소 오리진)으로 KMS가 선택되어 있는지 확인한 후 다음 단계를 선택합니다. 태그 추가 페이지가 열립니다.

  5. 키 식별과 키 사용 추적에 도움이 되는 태그를 추가한 후 다음 단계를 선택합니다. Define Key Administrative Permissions(키 관리 권한 정의) 페이지가 열리고 선택할 수 있는 사용자 및 역할 목록이 표시됩니다.

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

  7. 키 관리자가 키를 삭제할 수 있는지 여부를 선택한 후 다음 단계를 선택합니다. Define Key Usage Permissions(키 사용 권한 정의) 페이지가 열리고 선택할 수 있는 추가 사용자 및 역할 목록이 표시됩니다.

  8. 이전에 역할에서 생성한 역할을 선택하여 S3 대상 객체 암호화를 위한 액세스를 활성화합니다(예: DMS-S3-endpoint-access-role). 그런 다음 [Next Step]을 선택합니다.

    Preview Key Policy(키 정책 미리 보기) 페이지가 열리고 검토할 수 있는 키 정책의 JSON이 표시됩니다. 여기서 이전 단계에서 선택한 역할을 키 정책이 어디에서 참조하는지 볼 수 있습니다. 다음 예에 나온 것처럼 다양한 보안 주체(사용자 및 역할)에 허용되는 다양한 키 작업도 볼 수 있습니다.

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::944454115380:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::944454115380: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::944454115380:role/DMS-S3-endpoint-access-role" ] }, "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::944454115380:role/DMS-S3-endpoint-access-role" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
  9. [마침]을 클릭합니다. 마스터 암호화 키가 생성되었다는 메시지와 함께 암호화 키 페이지가 열립니다.

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

참고

AWS Key Management Service와 IAM 역할 및 정책을 사용하여 KMS 키를 생성하고 관리할 수도 있습니다. 자세한 내용은 키 관리 서비스(KMS): 개발자 안내서를 참조하십시오.

Amazon S3를 AWS DMS 대상으로 사용할 경우 엔드포인트 설정

추가 연결 속성을 사용하는 것과 비슷하게 엔드포인트 설정을 사용하여 Amazon S3 대상을 구성할 수 있습니다. AWS CLI에서 --s3-settings 'json-settings' 옵션과 함께 create-endpoint 명령을 사용하여 대상 엔드포인트를 생성할 때 이러한 설정을 지정할 수 있습니다. 여기서 json-settings는 설정을 지정하는 파라미터가 포함된 JSON 객체입니다. 예를 들어 --s3-settings file:///your-file-path/my_s3_settings.json에서처럼 동일한 json-settings가 포함된 .json 파일을 지정할 수도 있습니다. 여기서 my_s3_settings.json은 동일한 json-settings object를 포함한 .json 파일의 이름입니다.

엔드포인트 설정의 파라미터 이름은 대문자인 첫 글자를 제외하면 해당 추가 연결 속성의 이름과 동일합니다. 또한 create-endpoint 명령의 --s3-settings 옵션을 사용하여 추가 연결 속성을 사용하는 모든 S3 대상 엔드포인트 설정을 사용할 수 있는 것은 아닙니다. create-endpoint에 대한 AWS CLI 호출에서 사용할 수 있는 설정에 대한 자세한 내용은 AWS DMS AWS CLI Command Reference에서 create-endpoint를 참조하십시오. 이러한 설정에 대한 자세한 내용은 Amazon S3를 AWS DMS의 대상으로 사용 시 추가 연결 속성의 해당 추가 연결 속성을 참조하십시오.

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

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

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

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

다음 예는 S3 대상 객체를 암호화하도록 사용자 지정 KMS 키를 구성하는 방법을 보여 줍니다. 먼저 AWS CLI에서 다음 create-endpoint 호출을 할 수 있습니다.

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:944454115380:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'

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

기본적으로 S3 데이터 암호화는 기본 계정 KMS 키를 사용하여 이루어집니다. 이전 예의 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"}'

기본 계정 KMS 키 작업에 대한 자세한 내용은 암호화 키 설정 및 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 파일 페이지와 행 그룹에 대한 통계 수집을 활성화하는 기본값을 비활성화합니다.

Amazon S3를 AWS DMS의 대상으로 사용 시 추가 연결 속성

추가 연결 속성으로서 다음 옵션을 지정할 수 있습니다. 연결 속성 설정이 여러 개인 경우, 추가 공백 없이 세미콜론으로 구분하십시오.

옵션 설명
addColumnName

.csv 출력 파일에 열 이름 정보를 추가하는 데 사용할 수 있는 선택적 파라미터입니다. 기본값은 false입니다.

예:

addColumnName=true;

bucketFolder

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

예:

bucketFolder=testFolder;

bucketName

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

예:

bucketName=buckettest;

cannedAclForObjects

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

예:

cannedAclForObjects=PUBLIC_READ;

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

이 속성은 지정하지 않으면 NONE으로 기본 설정됩니다.

cdcInsertsOnly

쉼표로 구분된 값(.csv) 또는 컬럼 방식 스토리지(.parquet) 출력 파일에 INSERT 작업만을 작성하는 선택적 파라미터입니다. 기본적으로 .csv 또는 .parquet 레코드의 첫 번째 필드에는 행이 소스 데이터베이스에서 삽입, 업데이트 또는 삭제되었는지 여부를 나타내는 I(삽입), U(업데이트) 또는 D(삭제) 글자가 포함되어 있습니다. cdcInsertsOnly가 true로 설정되면 INSERT만 .csv 또는 .parquet 파일에 작성되고 I 주석은 사용되지 않습니다.

예:

cdcInsertsOnly=true;

compressionType

GZIP을 사용하여 대상 .csv 또는 .parquet 파일을 압축하는 선택적 파라미터입니다. 파일을 압축되지 않은 상태로 두려면 NONE(기본값)으로 설정하거나 사용하지 않습니다.

예:

compressionType=GZIP;

csvDelimiter

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

예:

csvDelimiter=,;

csvRowDelimiter

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

예:

csvRowDelimiter=\n;

maxFileSize

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

기본값: 1048576KB(1GB)

유효한 값: 1–1048576

예:

maxFileSize=512

rfc4180

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

기본값은 true입니다.

예:

rfc4180=false;

encryptionMode

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

기본값: SSE_S3

유효한 값: SSE_S3 또는 SSE_KMS

예:

encryptionMode=SSE_S3;

serverSidencryptionKmsKeyId

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

예:

serverSideEncryptionKmsKeyId=arn:aws:kms:us-east-1:944454115380:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480;

dataFormat

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

기본값: csv

유효한 값: csv 또는 parquet

예:

dataFormat=parquet;

encodingType

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

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

  • plain – 인코딩 없음.

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

기본값: rle-dictionary

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

예:

encodingType=plain-dictionary;

dictPageSizeLimit

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

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

유효한 값: 유효한 정수 값

예:

dictPageSizeLimit=2,048,000;

rowGroupLength

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

기본값: 10,024(10KB)

유효한 값: 유효한 정수 값

예:

rowGroupLength=20,048;

dataPageSize

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

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

유효한 값: 유효한 정수 값

예:

dataPageSize=2,048,000;

parquetVersion

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

기본값: PARQUET_1_0

유효한 값: PARQUET_1_0 또는 PARQUET_2_0

예:

parquetVersion=PARQUET_2_0;

enableStatistics

.parquet 파일 페이지와 행 그룹에 대한 통계를 활성화합니다.

기본값: true

유효한 값: true 또는 false

예:

enableStatistics=false;