AWS Database Migration Service のターゲットとしての Amazon DocumentDB の使用 - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Database Migration Service のターゲットとしての Amazon DocumentDB の使用

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 デベロッパーガイド」の「Supported MongoDB APIs, operations, and data types」を参照してください。

ソースエンドポイントがリレーショナルデータベースである場合は、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 は、mybucket 内のオブジェクトを次のとおり Amazon DocumentDB にマップします。

  • 最上位の URI パート (hr) は、 Amazon DocumentDB データベースにマップされます。

  • 次の URI パート (employee) は、Amazon DocumentDB のコレクションにマップされます。

  • employee の各オブジェクトは Amazon DocumentDB 内のドキュメントにマップされます。

Amazon S3 のマッピングルールの詳細については、「のソースとしての Amazon S3 の使用 AWS DMS」を参照してください。

Amazon DocumentDB のエンドポイント設定

AWS DMS バージョン 3.5.0 以降では、p並列スレッドと一括オペレーションのタスク設定を調整することで、Amazon DocumentDB エンドポイントの変更データキャプチャ (CDC) のパフォーマンスを向上できます。これを行うには、ParallelApply* タスク設定を使用して、同時スレッドの数、スレッドあたりのキューの数、バッファに格納するレコードの数を指定します。例えば、CDC ロードを実行し、128 本のスレッドを並列に適用するとします。また、スレッドあたり 64 のキューにアクセスして、バッファあたり 50 のレコードを保存する必要があります。

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 です。

AWS DMS のターゲットとして Amazon DocumentDB を使用する方法の詳細については、次のセクションを参照してください。

注記

ステップバイステップの移行ウォークスルーについては、「AWS Database Migration Service Step-by-Step Migration Guide」の「Migrating from MongoDB to Amazon DocumentDB」を参照してください。

ソースから Amazon DocumentDB ターゲットへのデータのマッピング

AWS DMS は、ソースエンドポイントからレコードを読み取り、読み取ったデータに基づいて JSON ドキュメントを構築します。各 JSON ドキュメントでは、AWS DMS は、一意の識別子として機能する _id フィールドを決定する必要があります。次に、その _id フィールドをプライマリキーとして使用して、JSON ドキュメントを Amazon DocumentDB コレクションに書き込みます。

単一列のソースデータ

ソースデータが 1 つの列で構成されている場合、そのデータは文字列型である必要があります。(ソースエンジンによっては、実際のデータ型が VARCHAR、NVARCHAR、TEXT、LOB、CLOB などになります)。AWS DMS は、データが有効な JSON ドキュメントであると想定し、データをそのまま Amazon DocumentDB にレプリケートします。

結果の JSON ドキュメントに _id という名前のフィールドが含まれている場合は、そのフィールドが Amazon DocumentDB で一意の _id として使用されます。

JSON に _id フィールドが含まれていない場合は、Amazon DocumentDB が自動的に _id 値を生成します。

複数列のソースデータ

ソースデータが複数の列で構成されている場合、AWS DMS はそのすべての列から JSON ドキュメントを構築します。AWS DMS は、ドキュメントの _id フィールドを特定するために、次のとおり処理します。

  • いずれかの列が _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\"}}" }

変換ルールを追加すると、ContactDetails を JSON オブジェクトに強制変換することができます。例えば、元のソース列名が 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 配列と見なし、ターゲットドキュメント内に 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\"]"
 }

変換ルールを追加すると、ContactAddressContactPhoneNumbers を次の表の例のとおり、JSON 配列に強制変換できます。

元のソース列名 変更後のソース列名
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 クラスターは、Transport Layer Security (TLS) を使用したセキュアな接続のみを受け入れます。TLS が有効になっている場合、Amazon DocumentDB へのすべての接続でパブリックキーが必要になります。

Amazon DocumentDB のパブリックキーを取得するには、AWS がホストする Amazon S3 バケットから rds-combined-ca-bundle.pem ファイルをダウンロードします。このファイルのダウンロードの詳細については、「Amazon DocumentDB デベロッパーガイド」の「Encrypting connections using TLS」を参照してください。

この .pem ファイルをダウンロードした後、ファイルに含まれるパブリックキーを AWS DMS に次のとおりインポートできます。

AWS Management Console

パブリックキー (.pem) ファイルをインポートするには
  1. https://console.aws.amazon.com/dms で AWS DMS コンソールを開きます。

  2. ナビゲーションペインで [証明書] を選択します。

  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 Cluster への接続

AWS DMS バージョン 3.4.7 以降では、ターゲットの Amazon DocumentDB エンドポイントを Elastic クラスターとして作成できます。ターゲットエンドポイントを Elastic クラスターとして作成する場合、既存の SSL 証明書は機能しないため、Amazon DocumentDB Elastic クラスターエンドポイントに新しい SSL 証明書をアタッチする必要があります。

新しい SSL 証明書を Amazon DocumentDB Elastic クラスターエンドポイントにアタッチするには
  1. ブラウザで https://www.amazontrust.com/repository/SFSRootCAG2.pem を開いて、コンテンツを .pem に一意のファイル名を付けて保存します (SFSRootCAG2.pem など)。この証明書ファイルは、後半の手順でインポートする必要がありますす。

  2. Elastic クラスターエンドポイントを作成して、次のオプションを設定します。

    1. [エンドポイント設定] の下で、[新しい CA 証明書の追加] をクリックします。

    2. [証明書の識別子] には、SFSRootCAG2.pem を入力します。

    3. [証明書ファイルのインポート] では、[ファイルを選択] をクリックして、前のタスクでダウンロードした SFSRootCAG2.pem ファイルに移動します。

    4. ファイルを選択して、ダウンロードした SFSRootCAG2.pem ファイルを選択します。

    5. [証明書をインポート] をクリックします。

    6. [証明書の選択] ドロップダウンで、[SFSRootCAG2.pem] を選択します。

ダウンロードした SFSRootCAG2.pem ファイルからの新しい SSL 証明書が、Amazon DocumentDB Elastic クラスターエンドポイントにアタッチされます。

Amazon DocumentDB をターゲットとした継続的なレプリケーション

Amazon DocumentDB をターゲットとした継続的なレプリケーション (変更データキャプチャ、CDC) が有効になっている場合、AWS DMS バージョン 3.5.0 以降では以前のリリースと比べてパフォーマンスが 20 倍向上しています。以前のリリースでは、AWS DMS のレコード処理は 1 秒あたり最大 250 レコードでしたが、現在 AWS DMS は 1 秒あたり約 5,000 レコードを処理できるようになりました。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 TABLEALTER 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 列を無視します。

  • [Change table] オプションが有効になっていて、AWS DMS が「_id」という名前のソース列を検出した場合、この列は変更テーブル「__id」(アンダースコア 2 つ) として表示されます。

  • ソースエンドポイントとして Oracle を選択する場合は、Oracle ソースで完全なサプリメンタルロギングが有効になっている必要があります。有効になっていない場合、ソースに変更されていない列があると、データは null 値として Amazon DocumentDB にロードされます。

  • レプリケーションタスク設定 TargetTablePrepMode:TRUNCATE_BEFORE_LOAD は、DocumentDB ターゲットエンドポイントでの使用がサポートされていません。

ターゲットとしての Amazon DocumentDB のエンドポイントの設定

追加の接続属性の使用と同様、エンドポイントの設定を使用して、ターゲットの Amazon DocumentDB データベースを設定できます。ターゲットエンドポイントを作成する際に、AWS DMS コンソールを使用するか、AWS CLI--doc-db-settings '{"EndpointSetting": "value", ...}' の JSON 構文を指定して create-endpoint コマンドを使用して設定を指定します。

次の表は、ターゲットとして Amazon DocumentDB を使用できるエンドポイント設定を説明しています。

属性名 有効値 デフォルト値と説明

replicateShardCollections

boolean

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

Boolean

BYTES

Binary data

DATE

Date

TIME

String (UTF8)

DATETIME

Date

INT1

32 ビット整数

INT2

32 ビット整数

INT4

32 ビット整数

INT8

64 ビット整数

NUMERIC

String (UTF8)

REAL4

Double

REAL8

Double

STRING

データが JSON として認識された場合、AWS DMS はドキュメントとして Amazon DocumentDB に移行する。それ以外の場合、データは文字列 (UTF8) にマップされる。

UINT1

32 ビット整数

UINT2

32 ビット整数

UINT4

64 ビット整数

UINT8

String (UTF8)

WSTRING

データが JSON として認識された場合、AWS DMS はドキュメントとして Amazon DocumentDB に移行する。それ以外の場合、データは文字列 (UTF8) にマップされる。

BLOB

Binary

CLOB

データが JSON として認識された場合、AWS DMS はドキュメントとして Amazon DocumentDB に移行する。それ以外の場合、データは文字列 (UTF8) にマップされる。

NCLOB

データが JSON として認識された場合、AWS DMS はドキュメントとして Amazon DocumentDB に移行する。それ以外の場合、データは文字列 (UTF8) にマップされる。