翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Database Migration Service のターゲットとしての Amazon DocumentDB の使用
が AWS DMS サポートする Amazon DocumentDB (MongoDB 互換) のバージョンについては、「」を参照してくださいのターゲット AWS DMS。 AWS DMS を使用して、 AWS DMS がサポートするソースデータエンジンから Amazon DocumentDB にデータを移行できます。ソースエンジンは、Amazon RDS、Aurora、Amazon S3 などの AWS マネージドサービス上に配置できます。このエンジンは Amazon EC2 またはオンプレミスで実行されている MongoDB などの自己管理データベース上に存在していてもかまいません。
を使用して AWS DMS 、ソースデータを Amazon DocumentDB データベース、コレクション、またはドキュメントにレプリケートできます。
注記
ソース エンドポイントが MongoDB または Amazon DocumentDB の場合は、[Document mode] (ドキュメントモード) で移行します。
MongoDB はバイナリ JSON 形式 (BSON) でデータを保存します。 は、Amazon DocumentDB でサポートされているすべての BSON データ型 AWS DMS をサポートします。これらのデータ型のリストについては、Amazon DocumentDB デベロッパーガイド の「サポートされている MongoDB API およびオペレーション、データ型」をご参照ください。
ソースエンドポイントがリレーショナルデータベースの場合、 はデータベースオブジェクトを次のように Amazon DocumentDB に AWS DMS マッピングします。
-
リレーショナルデータベースあるいはデータベーススキーマは、Amazon DocumentDB のデータベースにマップされます。
-
リレーショナルデータベース内のテーブルは、Amazon DocumentDB 内のコレクションですにマップされます。
-
リレーショナルテーブル内のレコードは、Amazon DocumentDB 内の文書にマップされます。ソースレコードのデータから各ドキュメントが構築されます。
ソース エンドポイントが Amazon S3 である場合は、Amazon S3 の AWS DMS マッピングルールに対応する Amazon DocumentDB オブジェクトが作成されます。たとえば次のような URI があったとします。
s3://mybucket/hr/employee
この場合、 は のオブジェクトを次のように Amazon DocumentDB mybucket
に AWS DMS マッピングします。
-
URI の最上位パート (
hr
) は、 Amazon DocumentDB データベースにマップされます。 -
次の URI パート (
employee
) は、Amazon DocumentDB のコレクションにマップされます。 -
employee
の各オブジェクトは Amazon DocumentDB 内のドキュメントにマップされます。
Amazon S3 のマッピングルールの詳細については、「AWS DMS のソースとしての Amazon RS3 の使用」をご参照ください。
Amazon DocumentDB のエンドポイント設定
AWS DMS バージョン 3.5.0 以降では、並列スレッドと一括オペレーションのタスク設定を調整することで、Amazon DocumentDB エンドポイントの変更データキャプチャ (CDC) のパフォーマンスを向上させることができます。これを行うには、ParallelApply*
タスク設定を使用して、同時スレッドの数、スレッドあたりのキュー数、バッファに格納するレコード数を指定します。例えば、CDC ロードを実行し、128 本のスレッドを並列に適用するとします。また、スレッドあたり 64 個のキューにアクセスして、バッファあたり 50 個のレコードを保存する必要があります。
CDC のパフォーマンスを向上させるために、 では以下のタスク設定 AWS DMS をサポートしています。
-
ParallelApplyThreads
– CDC ロード中に AWS DMS が Amazon DocumentDB ターゲットエンドポイントにデータレコードをプッシュするために使用する同時スレッドの数を指定します。デフォルト値は 0 で、最大値は 32 です。 -
ParallelApplyBufferSize
– CDC ロード中に Amazon DocumentDB ターゲットエンドポイントにプッシュする同時スレッドの各バッファキューに格納するレコードの最大数を指定します。デフォルト値は 100 で、最大値は 1,000 です。このオプションは、ParallelApplyThreads
で複数のスレッドを指定する場合に使用します。 -
ParallelApplyQueuesPerThread
– CDC 中に各スレッドがキューからデータレコードを取り出して Amazon DocumentDB エンドポイントのバッチロードを生成するためにアクセスするキューの数を指定する。デフォルトは 1 です。最大数は 512。
のターゲットとしての Amazon DocumentDB の使用の詳細については AWS DMS、以下のセクションを参照してください。
トピック
注記
移行プロセスのstep-by-stepのチュートリアルについては、 AWS Database Migration Service Step-by-Step移行ガイド」の「MongoDB から Amazon DocumentDB への移行」を参照してください。
ソースから Amazon DocumentDB ターゲットへのデータのマッピング
AWS DMS はソースエンドポイントからレコードを読み取り、読み取りデータに基づいて JSON ドキュメントを作成します。JSON ドキュメントごとに、一意の識別子として機能する _id
フィールドを決定 AWS DMS する必要があります。このターゲットは次に、その _id
フィールドをプライマリ キーとして使用してJSON ドキュメントを、Amazon DocumentDB コレクションに書き込みます。
単一列のソースデータ
ソースデータが 1 つの列で構成されている場合、そのデータは文字列型である必要があります。(ソースエンジンによっては、実際のデータ型は VARCHAR、NVARCHAR、TEXT、LOB、CLOB などです)。データは有効な JSON ドキュメントである AWS DMS と仮定し、そのまま Amazon DocumentDB にレプリケートします。
結果の JSON ドキュメントに _id
という名前のフィールドが含まれている場合は、そのフィールドが Amazon DocumentDB で一意の _id
として使用されます。
JSON に _id
フィールドが含まれていない場合は、Amazon DocumentDB によって自動的に _id
値が生成されます。
複数列のソースデータ
ソースデータが複数の列で構成されている場合、 はこれらのすべての列から JSON ドキュメント AWS DMS を作成します。ドキュメントの _id
フィールドを決定するために、 は次のように AWS DMS 処理します。
-
_id
という名前の列がある場合は、その列のデータがターゲット_id
として使用されます。 -
_id
列はないが、ソースデータにプライマリキーまたは一意のインデックスがある場合、 AWS DMS はそのキーまたはインデックス値を_id
値として使用します。プライマリキーや一意のインデックスのデータは、JSON ドキュメント内の明示的なフィールドとしても表示されます。 -
_id
列も、プライマリ キーも、一意のインデックスもない場合は、Amazon DocumentDB によって自動的に_id
値が生成されます。
ターゲットエンドポイントのデータ型の強制変換
AWS DMS は、Amazon DocumentDB ターゲットエンドポイントに書き込むときにデータ構造を変更できます。これらの変更をリクエストするには、ソースエンドポイントでテーブルや列の名前を変更するか、タスクの実行時に適用される変換ルールを指定します。
ネストされた JSON ドキュメント (json_ プレフィックス) の使用
ソース列の名前に 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_ プレフィックス) の使用
列の名前に array_
というプレフィックスを付けることによってデータ型を強制変換することができます (array_
)。手動で行うことも、変換を使用して行うこともできます。この場合、 は列 AWS DMS を 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 はContactPhoneNumbers
、次のように ContactAddress
と をレプリケートします。
{ "_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 のパブリックキーを取得するには、ホストされた Amazon Amazon S3バケットrds-combined-ca-bundle.pem
から ファイル をダウンロードします。 AWS ファイルのダウンロードの詳細については、Amazon DocumentDB デベロッパーガイドの「TLS を使用した接続の暗号化」をご参照ください。
この .pem ファイルをダウンロードしたら、以下で説明 AWS DMS するように、ファイルに含まれるパブリックキーを にインポートできます。
AWS Management Console
パブリックキー (.pem) ファイルをインポートするには
-
https://console.aws.amazon.com/dms
で AWS DMS コンソールを開きます。 -
ナビゲーションペインで [Certificates] を選択します。
-
[Import certificate (証明書のインポート)] を選択し、次の操作を行います。
[Certificate identifier (証明書の識別子)] に、証明書の一意の名前を入力します (例:
docdb-cert
)。-
[Import file (ファイルのインポート)] で、.pem ファイルを保存した場所を参照します。
すべての設定が正しいことを確認したら、[Add new CA certificate (新しい 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 mode (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 倍向上しています。が 1 秒あたり最大 250 レコード AWS DMS を処理する以前のリリースでは、 AWS DMS 現在は 1 秒あたり 5,000 レコード以上を効率的に処理します。 AWS DMS また、 は Amazon DocumentDB 内のドキュメントがソースと同期していることを確認します。ソースレコードが作成または更新されると、まず、以下を実行して、影響を受ける Amazon DocumentDB レコードを特定 AWS DMS する必要があります。
-
ソースレコードに
_id
という名前の列がある場合は、その列の値を使用して Amazon DocumentDB コレクションの対応する_id
が特定されます。 -
_id
列がないが、ソースデータにプライマリキーまたは一意のインデックスがある場合、 AWS DMS はそのキーまたはインデックス値を Amazon DocumentDB コレクションの として使用_id
します。 -
ソースレコードに
_id
列、プライマリキー、または一意のインデックスがない場合、 はすべてのソース列を Amazon DocumentDB コレクション内の対応するフィールドに AWS DMS 一致させます。
新しいソースレコードが作成されると、 は対応するドキュメントを Amazon DocumentDB に AWS DMS 書き込みます。既存のソースレコードが更新されると、 は Amazon DocumentDB のターゲットドキュメントの対応するフィールド AWS DMS を更新します。ターゲットドキュメントには存在するがソースレコードには存在しないフィールドは、一切変更されません。
ソースレコードが削除されると、 は Amazon DocumentDB から対応するドキュメント AWS DMS を削除します。
ソースの構造の変更 (DDL)
継続的レプリケーションでは、ソースのデータ構造 (テーブル、列など) の変更が Amazon DocumentDB の対応する要素に反映されます。リレーショナルデータベースでは、これらの変更はデータ定義言語 (DDL) ステートメントを使用して開始されます。がこれらの変更を Amazon DocumentDB に AWS DMS 伝達する方法を次の表に示します。
ソースの 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 では、複数のソーステーブルを 1 つの 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 コンソールを使用するか、 の create-endpoint
コマンドを JSON --doc-db-settings '{"
構文で使用してAWS CLI、ターゲットエンドポイントを作成するときに設定を指定します。EndpointSetting"
: "value"
, ...
}'
次の表は、ターゲットとして Amazon DocumentDB を使用できるエンドポイント設定を説明しています。
属性名 | 有効値 | デフォルト値と説明 |
---|---|---|
|
boolean
|
|
Amazon DocumentDB のターゲットデータ型
次の表に、DMS の使用時にサポートされる Amazon DocumentDB AWS ターゲットデータ型と、 AWS DMS データ型からのデフォルトのマッピングを示します。DMS データ型の詳細については、 AWS 「」を参照してください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 |
倍精度 |
REAL8 |
倍精度 |
STRING |
データが JSON として認識されると、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 |
UINT1 |
32 ビット整数 |
UINT2 |
32 ビット整数 |
UINT4 |
64 ビット整数 |
UINT8 |
文字列 (UTF8) |
WSTRING |
データが JSON として認識されると、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 |
BLOB |
バイナリ |
CLOB |
データが JSON として認識されると、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 |
NCLOB |
データが JSON として認識されると、 はデータをドキュメントとして Amazon DocumentDB AWS DMS に移行します。それ以外の場合は文字列 (UTF8) にマップされます。 |