翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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_
など)。これは、手動でも、変換を使用しても実行できます。この場合、列は文字列フィールドとしてではなく、ターゲットドキュメント内にネストされた JSON ドキュメントとして作成されます。columnName
例えば、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_
など)。これは、手動でも、変換を使用しても実行できます。この場合、AWS DMS は列を JSON 配列と見なし、ターゲットドキュメント内に JSON 配列を作成します。columnName
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\"]" }
変換ルールを追加すると、ContactAddress
と ContactPhoneNumbers
を次の表の例のとおり、JSON 配列に強制変換できます。
元のソース列名 | 変更後のソース列名 |
---|---|
ContactAddress |
array_ContactAddress |
ContactPhoneNumbers |
array_ContactPhoneNumbers |
これにより、AWS DMS は、次のようにContactAddress
と ContactPhoneNumbers
をレプリケートします。
{ "_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) ファイルをインポートするには
-
https://console.aws.amazon.com/dms
で AWS DMS コンソールを開きます。 -
ナビゲーションペインで [証明書] を選択します。
-
[証明書をインポート] をクリックして、次を実行します。
[証明書の識別子] で、この証明書の一意の名前を入力します。例えば
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 クラスターエンドポイントにアタッチするには
-
ブラウザで https://www.amazontrust.com/repository/SFSRootCAG2.pem
を開いて、コンテンツを .pem
に一意のファイル名を付けて保存します (SFSRootCAG2.pem
など)。この証明書ファイルは、後半の手順でインポートする必要がありますす。 -
Elastic クラスターエンドポイントを作成して、次のオプションを設定します。
-
[エンドポイント設定] の下で、[新しい CA 証明書の追加] をクリックします。
-
[証明書の識別子] には、
SFSRootCAG2.pem
を入力します。 -
[証明書ファイルのインポート] では、[ファイルを選択] をクリックして、前のタスクでダウンロードした
SFSRootCAG2.pem
ファイルに移動します。 -
ファイルを選択して、ダウンロードした
SFSRootCAG2.pem
ファイルを選択します。 -
[証明書をインポート] をクリックします。
-
[証明書の選択] ドロップダウンで、[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 TABLE 、ALTER TABLE...RENAME など) |
コレクション名を変更する。 |
TRUNCATE TABLE |
コレクションからすべてのドキュメントが削除される。ただし、HandleSourceTableTruncated が true の場合のみ。詳細については、「変更処理の DDL 処理のタスク設定」を参照してください。 |
DROP TABLE |
コレクションを削除する。ただし、HandleSourceTableDropped が true の場合のみ。詳細については、「変更処理の 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 '{"
の JSON 構文を指定して EndpointSetting"
:
"value"
, ...
}'create-endpoint
コマンドを使用して設定を指定します。
次の表は、ターゲットとして Amazon DocumentDB を使用できるエンドポイント設定を説明しています。
属性名 | 有効値 | デフォルト値と説明 |
---|---|---|
|
boolean
|
|
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) にマップされる。 |