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

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

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

AWS DMS가 지원하는 Amazon DocumentDB(MongoDB와 호환)에 관한 자세한 내용은 대상: AWS DMS을 참조하십시오. AWS DMS를 사용하면 AWS DMS가 지원하는 소스 데이터 엔진에서 Amazon DocumentDB(MongoDB 호환)로 데이터를 마이그레이션할 수 있습니다. 소스 엔진은 Amazon RDS, Aurora 또는 Amazon S3와 같은 AWS 관리형 서비스에서 사용할 수 있습니다. 또는 Amazon EC2 또는 온프레미스에서 실행되는 MongoDB와 같이 자체 관리형 데이터베이스를 기반으로 할 수 있습니다.

AWS DMS를 사용하여 Amazon DocumentDB 데이터베이스, 컬렉션 또는 문서에 소스 데이터를 복제할 수 있습니다.

참고

소스 엔드포인트가 MongoDB 또는 Amazon DocumentDB인 경우 문서 모드에서 마이그레이션을 실행하십시오.

MongoDB는 이진 JSON(BSON) 형식으로 데이터를 저장합니다. AWS DMS는 Amazon DocumentDB에서 지원되는 BSON 데이터 형식을 모두 지원합니다. 이러한 데이터 형식의 목록은 Amazon DocumentDB 개발자 안내서지원되는 MongoDB API, 작업 및 데이터 형식을 참조하십시오.

소스 엔드포인트가 관계형 데이터베이스인 경우, AWS DMS는 다음과 같이 Amazon DocumentDB에 데이터베이스 객체를 매핑합니다.

  • 관계형 데이터베이스 또는 데이터베이스 스키마는 Amazon DocumentDB 데이터베이스에 매핑됩니다.

  • 관계형 데이터베이스 내 테이블은 Amazon DocumentDB의 컬렉션에 매핑됩니다.

  • 관계형 테이블의 레코드는 Amazon DocumentDB의 문서에 매핑됩니다. 각 문서는 소스 레코드의 데이터로 구성됩니다.

소스 엔드포인트가 Amazon S3이면 그 결과로 만들어지는 Amazon DocumentDB 객체는 Amazon S3을 위한 AWS DMS 매핑 규칙에 해당합니다. 예를 들어 다음 URI를 고려해 보십시오.

s3://mybucket/hr/employee

이 경우, AWS DMS는 다음과 같이 Amazon DocumentDB의 객체를 mybucket로 매핑합니다.

  • URI의 최상위 부분(hr)은 Amazon DocumentDB 데이터베이스로 매핑됩니다.

  • 다음 URI 부분(employee)은 Amazon DocumentDB 컬렉션으로 매핑됩니다.

  • employee의 각 객체는 Amazon DocumentDB의 문서에 매핑됩니다.

Amazon S3의 매핑 규칙에 관한 자세한 내용은 Amazon S3를 AWS DMS 소스로 사용 단원을 참조하십시오.

Amazon DocumentDB 엔드포인트 설정

AWS DMS 버전 3.5.0 및 이후 버전에서는 병렬 스레드 및 대량 작업에 대한 작업 설정을 조정하여 Amazon DocumentDB 엔드포인트의 변경 데이터 캡처(CDC) 성능을 개선할 수 있습니다. 이렇게 하려면 ParallelApply* 작업 설정을 사용하여 동시 스레드 수, 스레드당 대기열 및 버퍼에 저장할 레코드 수를 지정해야 합니다. 예를 들어 CDC 로드를 수행하고 128개의 스레드를 병렬로 적용한다고 가정하겠습니다. 또한 버퍼당 50개 레코드가 저장된 스레드당 64개 대기열에 액세스하려고 합니다.

CDC 성능을 승격하기 위해 AWS DMS에서는 다음 작업 설정을 지원합니다.

  • ParallelApplyThreads – 데이터 레코드를 Amazon DocumentDB 대상 엔드포인트로 푸시하기 위해 CDC 로드 중에 AWS DMS가 사용하는 동시 스레드 수를 지정합니다. 기본값은 0이고 최대값은 32입니다.

  • ParallelApplyBufferSize – CDC 로드 중에 Amazon DocumentDB 대상 엔드포인트로 푸시할 동시 스레드에 대한 각 버퍼 대기열에 저장할 최대 레코드 수를 지정합니다. 기본값은 100이고 최대값은 1,000입니다. ParallelApplyThreads가 둘 이상의 스레드를 지정할 때 이 옵션을 사용합니다.

  • ParallelApplyQueuesPerThread – 각 스레드가 대기열에서 데이터 레코드를 가져오고 CDC 중에 Amazon DocumentDB 엔드포인트에 대한 배치 로드를 생성하기 위한 대기열 수를 지정합니다. 기본값은 1입니다. 최대 한도는 512입니다.

Amazon DocumentDB를 AWS DMS의 대상으로 사용하여 작업하는 방법에 관한 자세한 내용은 다음 단원을 참조하십시오.

참고

마이그레이션 프로세스를 단계별로 살펴보려면 AWS Database Migration Service 단계별 마이그레이션 가이드의 MongoDB에서 Amazon DocumentDB로 마이그레이션을 참조하십시오.

소스에서 Amazon DocumentDB 대상으로 데이터 매핑

AWS DMS는 소스 엔드포인트에서 레코드를 읽고 판독한 데이터를 토대로 JSON 문서를 구성합니다. 각 JSON 문서에서 AWS DMS는 고유한 식별자 역할을 하는 _id 필드를 확인해야 합니다. 그런 다음, _id 필드를 기본 키로 사용하여 JSON 문서를 Amazon DocumentDB 컬렉션에 기록합니다.

단일 열인 소스 데이터

단일 열로 구성된 소스 데이터는 문자열 형식으로 간주됩니다. (소스 엔진에 따라 실제 데이터 형식은 VARCHAR, NVARCHAR, TEXT, LOB, CLOB 등이 될 수 있습니다.) AWS DMS는 데이터가 유효한 JSON 문서라고 가정하고 데이터를 Amazon DocumentDB에 있는 그대로 복제합니다.

그 결과로 생성된 JSON 문서에 _id라는 필드가 포함되어 있는 경우, 해당 필드는 Amazon DocumentDB에서 고유한 _id로 사용됩니다.

JSON에 _id 필드가 포함되어 있지 않으면 Amazon DocumentDB에서 _id 값이 자동으로 생성됩니다.

다중 열인 소스 데이터

소스 데이터가 여러 개의 열로 구성된 경우, AWS DMS는 이러한 모든 열에서 JSON 문서를 구성합니다. 해당 문서에 대한 _id 필드를 확인하기 위해 AWS DMS는 다음과 같이 진행됩니다.

  • 열 중 하나의 이름이 _id이면 해당 열의 데이터가 대상 _id로 사용됩니다.

  • _id 열은 없지만 소스 데이터가 기본 키나 고유한 인덱스를 가지고 있으면 AWS DMS는 _id 값으로 해당 키 또는 인덱스 값을 사용합니다. 또한 기본 키 또는 고유 인덱스에서 나온 데이터는 JSON 문서에 명시적 필드 형태로 나타납니다.

  • _id 열과 기본 키 또는 고유 인덱스가 없으면 Amazon DocumentDB에서 _id 값이 자동으로 생성됩니다.

대상 엔드포인트에서 데이터 형식을 강제로 적용

AWS DMS는 Amazon DocumentDB 대상 엔드포인트에 기록할 때 데이터 구조를 수정할 수 있습니다. 소스 엔드포인트에서 열과 테이블의 이름을 변경하거나 작업 실행 시 적용되는 변환 규칙을 제공하여 이러한 변경을 요청할 수 있습니다.

중첩 JSON 문서(json_ prefix) 사용

데이터 형식을 강제로 적용하려면 직접, 또는 변환 기능을 사용해 소스 열 이름에 json_(즉, json_columnName) 접두사를 붙일 수 있습니다. 이 경우, 열은 문자열 필드가 아니라 대상 문서 내에 중첩 JSON 문서 형태로 생성됩니다.

예를 들어 MongoDB 소스 엔드포인트에서 다음 문서를 마이그레이션하고 싶다고 가정해 봅시다.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": "{"Home": {"Address": "Boston","Phone": "1111111"},"Work": { "Address": "Boston", "Phone": "2222222222"}}" }

소스 데이터 형식을 강제로 적용하지 않으면 기본적으로 포함된 ContactDetails 문서가 문자열 형태로 마이그레이션됩니다.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": "{\"Home\": {\"Address\": \"Boston\",\"Phone\": \"1111111\"},\"Work\": { \"Address\": \"Boston\", \"Phone\": \"2222222222\"}}" }

하지만 JSON 객체에 ContactDetails를 강제 적용하기 위한 변환 규칙을 추가할 수 있습니다. 예를 들어 원래의 소스 열 이름이 ContactDetails라고 가정해 봅시다. 데이터 형식을 중첩된 JSON으로 강제 변환하려면 소스에 “*json_*” 접두사를 수동으로 추가하거나 변환 규칙을 통해 소스 엔드포인트의 열 이름을 “JSON_ContactDetails”로 변경해야 합니다. 예를 들어, 아래의 변환 규칙을 사용할 수 있습니다.

{ "rules": [ { "rule-type": "transformation", "rule-id": "1", "rule-name": "1", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "ContactDetails" }, "rule-action": "rename", "value": "json_ContactDetails", "old-value": null } ] }

AWS DMS는 다음과 같이 ContactDetails 필드를 중첩된 JSON으로 복제합니다.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactDetails": { "Home": { "Address": "Boston", "Phone": "1111111111" }, "Work": { "Address": "Boston", "Phone": "2222222222" } } }

JSON 배열(array_ prefix) 사용

데이터 형식을 강제로 적용하려면 직접, 또는 변환 기능을 사용해 열 이름에 array_(즉, array_columnName) 접두사를 붙일 수 있습니다. 이 경우, AWS DMS는 해당 열을 JSON 어레이로 간주하고 대상 문서에서와 같이 이를 생성합니다.

MongoDB 소스 엔드포인트에서 다음 문서를 마이그레이션하고 싶다고 가정해 봅시다.

{ "_id" : "1", "FirstName": "John", "LastName": "Doe",
 "ContactAddresses": ["Boston", "New York"],
 "ContactPhoneNumbers": ["1111111111", "2222222222"] }

소스 데이터 형식을 강제로 적용하지 않으면 기본적으로 포함된 ContactDetails 문서가 문자열 형태로 마이그레이션됩니다.

{ "_id": "1", "FirstName": "John", "LastName": "Doe",
 "ContactAddresses": "[\"Boston\", \"New York\"]",
 "ContactPhoneNumbers": "[\"1111111111\", \"2222222222\"]"
 }

하지만 JSON 어레이에 ContactAddressContactPhoneNumbers를 강제 적용하기 위한 변환 규칙을 추가할 수 있습니다(아래 표 참조).

원래의 소스 열 이름 이름이 변경된 소스 열
ContactAddress array_ContactAddress
ContactPhoneNumbers array_ContactPhoneNumbers

AWS DMS는 다음과 같이 ContactAddressContactPhoneNumbers를 복제합니다.

{ "_id": "1", "FirstName": "John", "LastName": "Doe", "ContactAddresses": [ "Boston", "New York" ], "ContactPhoneNumbers": [ "1111111111", "2222222222" ] }

TLS를 사용하여 Amazon DocumentDB에 연결

기본적으로 새로 생성한 Amazon DocumentDB 클러스터는 전송 계층 보안(TLS)을 사용한 보안 연결만 허용합니다. TLS가 활성화되면 Amazon DocumentDB에 대한 모든 연결에 퍼블릭 키가 필요합니다.

AWS에서 호스팅된 Amazon S3 버킷에서 rds-combined-ca-bundle.pem 파일을 다운로드하여 Amazon DocumentDB의 퍼블릭 키를 검색할 수 있습니다. 이 파일을 다운로드하는 방법에 관한 자세한 내용은 Amazon DocumentDB 개발자 안내서TLS를 사용한 연결 암호화를 참조하십시오.

이 .pem 파일을 다운로드한 후 다음 설명에 따라 파일에 포함된 퍼블릭 키를 AWS DMS로 가져올 수 있습니다.

AWS Management Console

퍼블릭 키(.pem) 파일을 가져오려면
  1. https://console.aws.amazon.com/dmsAWS DMS에서 콘솔을 엽니다.

  2. 탐색 창에서 [Certificates]를 선택합니다.

  3. 인증서 가져오기를 선택하고 다음과 같이 합니다.

    • 인증서 식별자에 해당 인증서의 고유 이름(예: docdb-cert)을 입력합니다.

    • 파일 가져오기에서 .pem 파일이 저장된 위치로 이동합니다.

    원하는 대로 설정이 되었으면 새 CA 인증서 추가를 선택합니다.

AWS CLI

다음 예와 같이 aws dms import-certificate 명령을 사용하십시오.

aws dms import-certificate \ --certificate-identifier docdb-cert \ --certificate-pem file://./rds-combined-ca-bundle.pem

AWS DMS 대상 엔드포인트를 생성할 때 인증서 식별자(예: docdb-cert)를 제공합니다. 또한 SSL 모드 파라미터를 verify-full로 설정합니다.

Amazon DocumentDB Elastic Clusters에 대상으로 연결

AWS DMS 버전 3.4.7 이상에서는 Amazon DocumentDB 대상 엔드포인트를 Elastic 클러스터로 생성할 수 있습니다. 대상 엔드포인트를 Elastic 클러스터로 생성하는 경우 기존 SSL 인증서는 작동하지 않으므로 Amazon DocumentDB Elastic 클러스터 엔드포인트에 새 SSL 인증서를 연결해야 합니다.

Amazon DocumentDB Elastic 클러스터 엔드포인트에 새 SSL 인증서를 연결하려면
  1. 브라우저에서 https://www.amazontrust.com/repository/SFSRootCAG2.pem을 열고 콘텐츠를 고유한 파일 이름(예: SFSRootCAG2.pem)을 가진 .pem 파일에 저장합니다. 이 파일은 다음 단계에서 가져와야 하는 인증서 파일입니다.

  2. Elastic 클러스터 엔드포인트를 생성한 후 다음 옵션을 설정합니다.

    1. 엔드포인트 구성에서 새 CA 인증서 추가를 선택합니다.

    2. 인증서 식별자SFSRootCAG2.pem을 입력합니다.

    3. 인증서 파일 가져오기에서 파일 선택을 선택하고 이전에 다운로드한 SFSRootCAG2.pem 파일로 이동합니다.

    4. SFSRootCAG2.pem 파일 다운로드를 선택하고 엽니다.

    5. [Import certificate]를 선택합니다.

    6. 인증서 선택 드롭다운에서 SFSRootCag2.pem을 선택합니다.

다운로드한 SFSRootCAG2.pem 파일의 새 SSL 인증서가 이제 Amazon DocumentDB Elastic 클러스터 엔드포인트에 연결됩니다.

Amazon DocumentDB를 대상으로 지속적 복제

Amazon DocumentDB를 대상으로 지속적인 복제(변경 데이터 캡처, CDC)를 활성화한 경우 AWS DMS 버전 3.5.0 이상에서는 이전 릴리스보다 20배 향상된 성능 향상을 제공합니다. AWS DMS가 초당 최대 250개의 레코드를 처리하던 이전 릴리스에서 AWS DMS는 이제 초당 약 5000개의 레코드를 처리합니다. 또한 AWS DMS는 Amazon DocumentDB의 문서가 소스과 동기화된 상태를 유지하도록 합니다. 소스 레코드가 생성 또는 업데이트되면 AWS DMS는 먼저 다음을 수행하여 어떤 Amazon DocumentDB 레코드가 영향을 받는지 확인해야 합니다.

  • 소스 레코드에 _id라는 값이 있으면 해당 열의 값이 Amazon DocumentDB 컬렉션에서 해당되는 _id를 확인합니다.

  • _id 열은 없지만 소스 데이터가 기본 키나 고유 인덱스를 가지고 있으면 AWS DMS는 Amazon DocumentDB 컬렉션을 위한 _id로 해당 키나 인덱스 값을 사용합니다.

  • 소스 레코드에 _id 열, 기본 키 또는 고유 인덱스가 없으면 AWS DMS는 Amazon DocumentDB 컬렉션의 해당 필드에 모든 소스 열을 일치시킵니다.

새로운 소스 레코드가 생성되면 AWS DMS는 해당 문서를 Amazon DocumentDB에 기록합니다. 기존 소스 레코드가 업데이트되면 AWS DMS는 Amazon DocumentDB의 대상 문서에서 해당 필드를 업데이트합니다. 대상 문서에는 존재하지만 소스 레코드에 존재하지 않는 필드는 그대로 남아 있습니다.

소스 레코드가 삭제되면 AWS DMS는 Amazon DocumentDB에서 해당 문서를 삭제합니다.

소스에서 구조 변경(DDL)

지속적 복제가 이루어지면서 소스 데이터 구조(테이블, 열 등)의 변경 사항이 Amazon DocumentDB의 구조에 전파됩니다. 관계형 데이터베이스에서 이러한 변경 사항은 데이터 정의 언어(DDL) 명령문을 사용해 시작됩니다. AWS DMS가 이러한 변경 사항을 Amazon DocumentDB에 어떻게 전파하는지 다음 표에서 확인할 수 있습니다.

소스의 DDL Amazon DocumentDB 타겟에서의 효과
CREATE TABLE 빈 컬렉션을 생성합니다.
테이블 이름을 변경하는 명령문(RENAME TABLE, ALTER TABLE...RENAME 등) 컬렉션의 이름을 바꿉니다.
TRUNCATE TABLE 해당 컬렉션에서 모든 문서를 제거합니다(단, HandleSourceTableTruncatedtrue인 경우에만). 자세한 내용은 변경 처리 DDL을 다루기 위한 작업 설정 섹션을 참조하세요.
DROP TABLE 해당 컬렉션을 삭제합니다(단, HandleSourceTableDroppedtrue인 경우에만). 자세한 내용은 변경 처리 DDL을 다루기 위한 작업 설정 섹션을 참조하세요.
테이블에 열을 추가하는 명령문(ALTER TABLE...ADD 등) DDL 명령문이 무시되면서 경고가 발행됩니다. 첫 번째 INSERT가 소스에서 수행될 때 대상 문서에 새 필드가 추가됩니다.
ALTER TABLE...RENAME COLUMN DDL 명령문이 무시되면서 경고가 발행됩니다. 첫 번째 INSERT가 소스에서 수행될 때 대상 문서에 새로운 이름의 필드가 추가됩니다.
ALTER TABLE...DROP COLUMN DDL 명령문이 무시되면서 경고가 발행됩니다.
열 데이터 형식을 변경하는 명령문(ALTER COLUMN...MODIFY 등) DDL 명령문이 무시되면서 경고가 발행됩니다. 첫 번째 INSERT가 소스에서 새 데이터 형식으로 수행될 때 이러한 새 데이터 형식을 가진 필드와 함께 대상 문서가 생성됩니다.

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

Amazon DocumentDB를 AWS DMS의 대상으로 사용할 때는 다음 제한 사항이 적용됩니다.

  • Amazon DocumentDB에서 컬렉션 이름에는 달러 기호($)가 포함될 수 없습니다. 또한 데이터베이스 이름에는 어떤 Unicode 문자도 포함될 수 없습니다.

  • AWS DMS는 여러 소스 테이블을 단일 Amazon DocumentDB 컬렉션에 병합하는 기능을 지원하지 않습니다.

  • AWS DMS가 기본 키가 없는 소스 데이터에서 변경 사항을 처리할 때 해당 테이블의 모든 LOB 열이 무시됩니다.

  • 변경 테이블 옵션이 활성화되고 AWS DMS에 "_id"라는 소스 열이 나타나면 해당 열은 변경 테이블에 "__id"(2개의 밑줄)로 표시됩니다.

  • 소스 엔드포인트로 Oracle을 선택하면 Oracle 소스에서 전체 보충 로깅을 활성화해야 합니다. 그렇지 않으면 변경되지 않은 소스의 열이 있을 경우에 Amazon DocumentDB에 데이터가 null 값으로 로드됩니다.

  • 복제 작업 설정 TargetTablePrepMode:TRUNCATE_BEFORE_LOAD는 DocumentDB 대상 엔드포인트와 함께 사용할 수 없습니다.

Amazon DocumentDB를 대상으로 하는 엔드포인트 설정 사용

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

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

속성 이름 유효값 기본값과 설명

replicateShardCollections

부울

true

false

값이 true일 때 이 엔드포인트 설정은 다음과 같은 영향을 미치며 다음과 같은 제한이 적용됩니다.

  • AWS DMS는 대상 샤드 컬렉션에 데이터를 복제할 수 있습니다. 이 설정은 대상 DocumentDB 엔드포인트가 Elastic 클러스터인 경우에만 적용됩니다.

  • TargetTablePrepModeDO_NOTHING으로 설정해야 합니다.

  • AWS DMS는 마이그레이션 중에 useUpdateLookup을 자동으로 false로 설정합니다.

Amazon DocumentDB의 대상 데이터 형식

다음 테이블에서 AWS DMS를 사용할 때 지원되는 Amazon DocumentDB 대상 데이터 형식과 AWS DMS 데이터 형식에서의 기본 매핑을 확인할 수 있습니다. AWS DMS 데이터 형식에 관한 자세한 내용은 AWS Database Migration Service에서 사용되는 데이터 형식 단원을 참조하십시오.

AWS DMS 데이터 형식

Amazon DocumentDB 데이터 형식

BOOLEAN

부울

BYTES

이진 데이터

DATE

날짜

TIME

문자열(UTF8)

DATETIME

날짜

INT1

32비트 정수

INT2

32비트 정수

INT4

32비트 정수

INT8

64비트 정수

NUMERIC

문자열(UTF8)

REAL4

Double

REAL8

Double

STRING

데이터가 JSON으로 인식되면 AWS DMS는 데이터를 Amazon DocumentDB에 문서 형태로 마이그레이션합니다. 그렇지 않으면 데이터가 문자열(UTF8)로 매핑됩니다.

UINT1

32비트 정수

UINT2

32비트 정수

UINT4

64비트 정수

UINT8

문자열(UTF8)

WSTRING

데이터가 JSON으로 인식되면 AWS DMS는 데이터를 Amazon DocumentDB에 문서 형태로 마이그레이션합니다. 그렇지 않으면 데이터가 문자열(UTF8)로 매핑됩니다.

BLOB

이진수

CLOB

데이터가 JSON으로 인식되면 AWS DMS는 데이터를 Amazon DocumentDB에 문서 형태로 마이그레이션합니다. 그렇지 않으면 데이터가 문자열(UTF8)로 매핑됩니다.

NCLOB

데이터가 JSON으로 인식되면 AWS DMS는 데이터를 Amazon DocumentDB에 문서 형태로 마이그레이션합니다. 그렇지 않으면 데이터가 문자열(UTF8)로 매핑됩니다.