

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

# のソースとしての MongoDB の使用 AWS DMS
<a name="CHAP_Source.MongoDB"></a>

 がソースとして AWS DMS サポートする MongoDB のバージョンについては、「」を参照してください[のソース AWS DMS](CHAP_Introduction.Sources.md)。

MongoDB バージョンのサポートについては、次の点に注意します。
+ バージョン AWS DMS 3.4.5 以降では、MongoDB バージョン 4.2 および 4.4 がサポートされています。
+  AWS DMS 3.4.5 以降のバージョンと MongoDB 4.2 以降のバージョンでは、分散トランザクションがサポートされています。MongoDB の分散トランザクションの詳細については、「[MongoDB ドキュメント](https://www.mongodb.com/docs/)」の「[Transactions](https://docs.mongodb.com/manual/core/transactions/)」を参照してください。
+  AWS DMS 3.5.0 以降のバージョンは、3.6 より前のバージョンの MongoDB をサポートしていません。
+ バージョン AWS DMS 3.5.1 以降では、MongoDB バージョン 5.0 がサポートされています。
+ バージョン AWS DMS 3.5.2 以降では、MongoDB バージョン 6.0 がサポートされています。
+ バージョン AWS DMS 3.5.4 以降では、MongoDB バージョン 7.0 および 8.0 がサポートされています。



MongoDB を初めてお使いの方のために、以下の MongoDB データベースの概念について説明します。
+ MongoDB のレコードは、フィールドと値のペアで構成されるデータ構造である*ドキュメント*です。フィールドの値には、他のドキュメント、配列、およびドキュメントの配列を含めることができます。ドキュメントは、リレーショナルデータベースのテーブルの行とほぼ同等です。
+ MongoDB の*コレクション*はドキュメントのグループであり、リレーショナルデータベーステーブルとほぼ同等です。
+ MongoDB の*データベース*はコレクションの集合であり、リレーショナル データベーステーブルのスキーマとほぼ同等です。
+ 内部的には、MongoDB ドキュメントは、ドキュメント内の各フィールドのタイプを含む、圧縮形式でバイナリ JSON (BSON) ファイルとして格納されます。各ドキュメントには一意の ID があります。

AWS DMS は、MongoDB をソースとして使用する場合、*ドキュメントモード*または*テーブル*モードの 2 つの移行モードをサポートします。MongoDB エンドポイントを作成するときか、 AWS DMS コンソールからの**メタデータモード** パラメータを設定して、使用する移行モードを指定します。オプションとして、エンドポイント設定パネルで**\$1id を個別の列として指定する**のチェックマークボタンを選択して、プライマリ キーとして機能する `_id` という名前の 2 番目の列を作成できます。

移行モードの選択は、以下に説明するように、ターゲットデータの結果形式に影響します。

**ドキュメントモード**  
ドキュメントモードでは、MongoDB ドキュメントは「現状のまま」移行されます。これは、その中のドキュメントデータが `_doc` という名前のターゲットテーブルの 1 つの列と見なされることを意味します。MongoDB をソースエンドポイントとして使用する場合のデフォルト設定はドキュメントモードです。  
たとえば、myCollection という MongoDB コレクションの次のドキュメントを考えてみましょう。  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
ドキュメントモードを使用してデータをリレーショナルデータベーステーブルに移行した後、データは以下のように構成されます。MongoDB ドキュメントのデータフィールドは ` _doc` 列に統合されています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MongoDB.html)
オプションで、追加の接続属性 `extractDocID` を *true* に設定して、プライマリキーとして動作する、`"_id"` という名前の 2 つ目の列を作成できます。CDC を使用する場合は、このパラメータを **true に設定します。  
[マルチドキュメントトランザクション](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)を生成するソースで CDC を使用する場合は、 `ExtractDocId`パラメータを *true* に設定**する必要があります**。このパラメータが有効になっていない場合、 AWS DMS タスクはマルチドキュメントトランザクションを検出すると失敗します。  
ドキュメントモードでは、 は次のようなコレクションの作成と名前変更 AWS DMS を管理します。  
+ ソースデータベースに新しいコレクションを追加すると、 はコレクションの新しいターゲットテーブル AWS DMS を作成し、ドキュメントをレプリケートします。
+ ソースデータベースで既存コレクションの名前を変更すると、 AWS DMS はターゲット テーブルの名前を変更しません。
ターゲット エンドポイントが Amazon DocumentDB の場合は、**ドキュメントモード**で移行を実行します。

**テーブルモード**  
テーブルモードでは、 は MongoDB ドキュメントの各最上位フィールドをターゲットテーブルの列 AWS DMS に変換します。フィールドがネストされている場合、 はネストされた値を 1 つの列に AWS DMS フラット化します。 AWS DMS 次に、キーフィールドとデータ型をターゲットテーブルの列セットに追加します。  
MongoDB ドキュメントごとに、 は各キーとタイプをターゲットテーブルの列セット AWS DMS に追加します。たとえば、テーブルモードを使用すると、 は前の例を次のテーブル AWS DMS に移行します。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MongoDB.html)
入れ子の値は、ドット区切りのキー名を含む列にフラット化されます。列は、ピリオドで区切られたフラット化されたフィールド名の連結と呼ばれます。たとえば、 は などのネストされた値のフィールドを持つ JSON ドキュメント`{"a" : {"b" : {"c": 1}}}`を という名前の列 AWS DMS に移行します。 `a.b.c.`  
ターゲット列を作成するには、 は指定された数の MongoDB ドキュメント AWS DMS をスキャンし、すべてのフィールドとそのタイプのセットを作成します。 AWS DMS 次に、このセットを使用してターゲットテーブルの列を作成します。コンソールを使用して MongoDB ソースエンドポイントを作成または変更する場合は、スキャンするドキュメントの数を指定できます。デフォルト値は 1000 ドキュメントです。を使用する場合は AWS CLI、追加の接続属性 を使用できます`docsToInvestigate`。  
テーブルモードでは、 は次のようなドキュメントとコレクション AWS DMS を管理します。  
+ 既存のコレクションにドキュメント (行) を追加する場合は、ドキュメントがレプリケートされます。ターゲットに存在しないフィールドがある場合、それらのフィールドはレプリケーションされません。
+ ドキュメントを更新すると、更新されたドキュメントはレプリケートされます。ターゲットに存在しないフィールドがある場合、それらのフィールドはレプリケーションされません。
+ ドキュメントの削除は完全にサポートされています。
+ CDC タスクの実行中に新しいコレクションを追加しても、ターゲット上に新しいテーブルは作成されません。
+ 変更データキャプチャ (CDC) フェーズ AWS DMS では、 はコレクションの名前変更をサポートしていません。

**Topics**
+ [のソースとして MongoDB を使用する場合に必要なアクセス許可 AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [CDC 用 MongoDB レプリカセットの設定](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [のソースとして MongoDB を使用する場合のセキュリティ要件 AWS DMS](#CHAP_Source.MongoDB.Security)
+ [MongoDB コレクションをセグメント化した並行移行](#CHAP_Source.MongoDB.ParallelLoad)
+ [MongoDB を のソースとして使用する場合の複数のデータベースの移行 AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [のソースとして MongoDB を使用する場合の制限 AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [のソースとして MongoDB を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [MongoDB のソースデータ型](#CHAP_Source.MongoDB.DataTypes)

## のソースとして MongoDB を使用する場合に必要なアクセス許可 AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

MongoDB ソースを使用した AWS DMS 移行では、ルート権限を持つユーザーアカウントを作成するか、移行するデータベースに対するアクセス許可のみを持つユーザーを作成できます。

次のコードは、ルートアカウントとなるユーザーを作成します。

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)
```

MongoDB 3.x ソースに関して次のコードは、移行するデータベースに対して最小限の権限を持つユーザーを作成します。

```
use database_to_migrate
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "read", db: "local" }, "read"] 
})
```

MongoDB 4.x ソースの場合、以下のコードは最小限の権限を持つユーザーを作成します。

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

たとえば、「admin」データベースに次のロールを作成します。

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

ロールが作成されたら、移行するデータベースにユーザーを作成します。

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## CDC 用 MongoDB レプリカセットの設定
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

MongoDB で継続的なレプリケーションまたは CDC を使用するには、MongoDB オペレーションログ (oplog) へのアクセス AWS DMS が必要です。レプリカセットが存在しない場合に oplog を作成するには、レプリカセットをデプロイする必要があります。詳細については、 [MongoDB のドキュメント](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/)をご参照ください。

ソースエンドポイントとして設定された MongoDB レプリカのプライマリまたはセカンダリノードを持つ CDC を使用することができます。

**スタンドアロンインスタンスをレプリカセットに変換するには**

1. コマンドラインを使用して、`mongo` に接続します。

   ```
   mongo localhost
   ```

1. `mongod` サービスを停止します。

   ```
   service mongod stop
   ```

1. 次のコマンドを使用して、`mongod` を再起動します。

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. 次のコマンドを使用して、レプリカセットへの接続をテストします。

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

ドキュメントモードの移行を実行する予定がある場合は、MongoDB エンドポイントを作成するときに `_id as a separate column` オプションを選択します。このオプションを選択すると、プライマリキーとして機能する `_id` という名前の 2 番目の列が作成されます。この 2 番目の列は、データ操作言語 (DML) オペレーションをサポートするために AWS DMS で必要です。

**注記**  
AWS DMS は、オペレーションログ (oplog) を使用して、継続的なレプリケーション中の変更をキャプチャします。がレコード AWS DMS を読み取る前に MongoDB がオログからレコードをフラッシュすると、タスクは失敗します。少なくとも 24 時間は変更が保持されるように oplog のサイジングを行うことをお勧めします。

## のソースとして MongoDB を使用する場合のセキュリティ要件 AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS DMS は、MongoDB の 2 つの認証方法をサポートしています。この 2 つの認証方法はパスワードを暗号化する際に使用するため、`authType` パラメータが *PASSWORD* に設定されているときにのみ使用されます。

MongoDB の認証方法は次のとおりです。
+ **MONGODB-CR** — 下位互換性のために
+ **SCRAM-SHA-1** – バージョン 3.x と 4.0 認証を使用する場合のデフォルト

認証方法が指定されていない場合、 AWS DMS は MongoDB ソースのバージョンにデフォルトの方法を使用します。

## MongoDB コレクションをセグメント化した並行移行
<a name="CHAP_Source.MongoDB.ParallelLoad"></a>

移行タスクのパフォーマンスを向上させるために、MongoDB ソース エンドポイントは、テーブルマッピングでの並列全ロードの 2 つのオプションをサポートしています。

つまり、自動セグメンテーションまたはテーブルマッピングによる範囲セグメンテーションを使用して、JSON 設定で並列全ロードを行うことで、コレクションを並行移行できます。自動セグメンテーションでは、 の基準を指定 AWS DMS して、各スレッドで移行するソースを自動的にセグメント化できます。範囲セグメンテーションを使用すると、DMS が各スレッドで移行する各セグメントの特定 AWS DMS の範囲を指定できます。これらの設定の詳細については、「[テーブルとコレクション設定のルールとオペレーション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)」をご参照ください。

### 自動セグメンテーション範囲を使用して MongoDB データベースを並列移行する
<a name="CHAP_Source.MongoDB.ParallelLoad.AutoPartitioned"></a>

スレッドごとにデータを自動的にパーティション (セグメント化) する AWS DMS の基準を指定することで、ドキュメントを並列移行できます。特に、スレッドごとに移行するドキュメントの数を指定します。このアプローチを使用して、スレッドあたりのパフォーマンスを最大化するためにセグメントの境界を最適化 AWS DMS しようとします。

テーブルマッピングで以下のテーブル設定オプションを使用して、セグメンテーション基準を指定できます。


|  テーブル設定オプション  |  説明  | 
| --- | --- | 
|  `"type"`  |  (必須) ソースとして `"partitions-auto"` for MongoDB を設定します。  | 
|  `"number-of-partitions"`  |  (オプション) 移行に使用されるパーティション (セグメント) の総数。デフォルトは 16 です。  | 
|  `"collection-count-from-metadata"`  |  (オプション) このオプションが `true` に設定されている場合, AWS DMS は、パーティションの数を決定するために、推定コレクション数を使用します。このオプションが に設定されている場合`false`、 は実際のコレクション数 AWS DMS を使用します。デフォルトは `true` です。  | 
|  `"max-records-skip-per-page"`  |  (オプション) 各パーティションの境界を決定するときに一度にスキップするレコードの数。 は、ページ分割されたスキップアプローチ AWS DMS を使用してパーティションの最小境界を決定します。デフォルトは 10,000 です。 比較的高い値を設定すると、カーソルがタイムアウトし、タスクが失敗する可能性がある。相対的に低い値を設定すると、ページあたりのオペレーションが増え、全ロードが遅くなります。  | 
|  `"batch-size"`  |  (オプション) 1 つのバッチで返されるドキュメントの数を制限します。各バッチには、サーバーへの往復が必要です。バッチサイズがゼロ (0) の場合、カーソルはサーバー定義の最大バッチサイズを使用します。デフォルトは 0 です。  | 

次の例は、自動セグメンテーションのテーブルマッピングを示しています。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

自動セグメンテーションには次のような制限があります。各セグメントの移行は、コレクション数とコレクション用の最小値 `_id` を別個にフェッチします。次に、ページ割りされたスキップを使用して、そのセグメントの最小境界を計算します。

従って、コレクション内のすべてのセグメント境界が計算されるまで、各コレクションで `_id` の最小値が一定のままであるようにします。セグメント境界の計算中にコレクションの `_id` 最小値を変更すると、データの損失や重複行のエラーが発生する可能性があります。

### 範囲セグメンテーションを使用して MongoDB データベースを並列移行する
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

スレッド内の各セグメント範囲を指定することで、ドキュメントを並列移行できます。このアプローチを使用して、スレッドあたりのドキュメント範囲の選択に応じて、各スレッドで移行するように AWS DMS 特定のドキュメントに指示します。

次のイメージは、7 つの項目を持つ MongoDB コレクションとプライマリキーとしての `_id` を示しています。

![\[7 つの項目を持つ MongoDB コレクション。\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/images/datarep-docdb-collection.png)


コレクションを の 3 つの特定のセグメントに分割 AWS DMS して並行して移行するには、テーブルマッピングルールを移行タスクに追加できます。これは次の JSON 例で示されます。

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

このテーブルマッピング定義は、ソースコレクションを 3 つのセグメントに分割し、並列移行します。以下は、セグメンテーション境界です。

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

移行タスクが完了したら、次の例に示すように、テーブルが並列にロードされたことをタスクログから確認できます。ソーステーブルから各セグメントをアンロードするために使用する MongoDB `find` 句 を確認することもできます。

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

現在、 はセグメントキー列として次の MongoDB データ型 AWS DMS をサポートしています。
+ Double
+ String
+ ObjectId
+ 32 ビット整数
+ 64 ビット整数

## MongoDB を のソースとして使用する場合の複数のデータベースの移行 AWS DMS
<a name="CHAP_Source.MongoDB.Multidatabase"></a>

AWS DMS バージョン 3.4.5 以降では、サポートされているすべての MongoDB バージョンについて、1 つのタスクで複数のデータベースを移行できます。複数のデータベースを移行する場合は、次のステップを実行します：

1. MongoDB ソース エンドポイントを作成するときは、次のいずれかの操作を行います：
   + DMS コンソールの**エンドポイントの作成**ページで、**[Endpoint configuration]** (エンドポイント設定) の下にある**[Database name]** (データベース名) が空であることを確認してください。
   + コマンドを使用して AWS CLI `CreateEndpoint`、空の文字列値を の `DatabaseName`パラメータに割り当てます`MongoDBSettings`。

1. MongoDB ソースから移行するデータベースごとに、タスクのテーブルマッピングにおけるスキーマ名としてのデータベース名を指定します。これを行うには、コンソール内のガイド付き入力を使用するか、JSON で直接入力できます。ガイド付き入力の詳細については、「[コンソールからテーブル選択および変換を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)」をご参照ください。JSON の詳細については、「[選択ルールと選択アクション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)」をご参照ください。

たとえば、次の JSON を指定して、3 つの MongoDB データベースを移行するとします。

**Example スキーマ内のすべてのテーブルの移行**  
次の JSON は、すべてのテーブルをソースエンドポイントの `Customers`、`Orders`、`Suppliers` データベースからターゲット エンドポイントに移行します。  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "3",
            "rule-name": "3",
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

## のソースとして MongoDB を使用する場合の制限 AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

以下は、MongoDB をソースとして使用する場合の制限です AWS DMS。
+ テーブルモードの場合、コレクション内のドキュメントは、同じフィールドの値で使用されるデータ型と一致している必要があります。例えば、コレクション内のドキュメントに `'{ a:{ b:value ... }'` が含まれている場合、`a.b` フィールドの `value` を参照するコレクション内のすべてのドキュメントは、値が登場するコレクションの場所を問わず、`value` で同じデータ型を使用する必要があります。
+ `_id` オプションが別の列として設定されている場合、ID 文字列は 200 文字以下でなければなりません。
+ オブジェクト ID および配列タイプキーは、テーブルモードで `oid` および `array` というプレフィックスが付けられた列に変換されます。

  内部的には、これらの列はプレフィックスが付けられた名前で参照されます。これらの列を参照 AWS DMS する変換ルールを で使用する場合は、必ずプレフィックス付き列を指定してください。たとえば、`${_id}` ではなく `${oid__id}` を指定するか、`${_addresses}` ではなく `${array__addresses}` を指定します。
+  コレクション名とキー名にドル記号 (\$1) を含めることはできません。
+ AWS DMS は、RDBMS ターゲットのテーブルモードで異なる大文字と小文字 (上、下) の同じフィールドを含むコレクションをサポートしていません。たとえば、 AWS DMS は `Field1`と という名前の 2 つのコレクションを持つことをサポートしていません`field1`。
+ 前述のように、テーブルモードとドキュメントモードには制限があります。
+ 自動セグメンテーションを使用して並列移行するには、前述の制限があります。
+ ソースフィルターは、MongoDB ではサポートされていません。
+ AWS DMS は、ネストレベルが 97 より大きいドキュメントをサポートしていません。
+ AWS DMS は、DocumentDB 以外のターゲットに移行するときに UTF-8 でエンコードされたソースデータを必要とします。non-UTF-8文字を含むソースの場合は、移行前に UTF-8 に変換するか、代わりに Amazon DocumentDB に移行します。
+ AWS DMS では、MongoDB バージョン 5.0 の以下の機能はサポートされていません。
  + ライブリシャーディング
  + クライアント側のフィールドレベルの暗号化 (CSFLE)
  + 時系列コレクションの移行
**注記**  
DocumentDB は、時系列コレクションをサポートしていないため、フルロードフェーズで移行された時系列コレクションは Amazon DocumentDB の通常のコレクションに変換されます。

## のソースとして MongoDB を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

MongoDB ソースエンドポイントを設定するときは、 AWS DMS コンソールを使用して複数のエンドポイント設定を指定できます。

次の表は、MongoDB データベースを AWS DMS ソースとして使用する場合に使用できる構成設定を示しています。


| 設定 (属性) | 有効値 | デフォルト値と説明 | 
| --- | --- | --- | 
|  **[Authentication mode]** (認証モード)  |  `"none"` `"password"`  |  値 `"password"` では、ユーザー名とパスワードの入力が求められます。`"none"` を指定した場合、ユーザー名とパスワードのパラメータは使用されません。  | 
|  **[Authentication source]** (認証ソース)  |  有効な MongoDB データベース名を指定してください。  |  認証情報を検証するために使用する MongoDB データベースの名前。デフォルト値は `"admin"` です。  | 
|  **[Authentication mechanism]** (認証メカニズム)  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  認証メカニズム。` "default"` 値は `"scram_sha_1"` です。`authType` が `"no"` に設定されている場合、この設定は使用されません。  | 
|  **[Metadata mode]** (メタデータモード)  |  ドキュメントとテーブル  |  ドキュメントモードまたはテーブルモードを選択します。  | 
|  **スキャンするドキュメントの数** (`docsToInvestigate`)  |  `0` より大きい正の整数。  |  このオプションは、テーブルモードでのみターゲット テーブル定義を定義するために使用します。  | 
|  **[\$1id as a separate column]** (\$1id を個別の列として指定する)  |  チェックボックス  |  このチェックを入れると、プライマリ キーとして機能する `_id` という名前の 2 番目の列が作成されます。  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` - `NestingLevel` が `"none"` に設定されている場合、この属性を使用します。 [マルチドキュメントトランザクション](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)を生成するソースで CDC を使用する場合は、 `ExtractDocId`パラメータを に設定**する必要があります**`true`。このパラメータが有効になっていない場合、 AWS DMS タスクはマルチドキュメントトランザクションを検出すると失敗します。  | 
|  `socketTimeoutMS`  |  0 以上の整数。 追加の接続属性 (ECA) のみ  |  この設定はミリ秒単位で、MongoDB クライアントの接続タイムアウトを設定する。値が 0 以下の場合、MongoDB クライアントのデフォルトが使用される。  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  true の場合、CDC 更新イベント中に、 は更新されたドキュメント全体をターゲット AWS DMS にコピーします。false に設定すると、MongoDB update コマンド AWS DMS を使用して、ターゲットのドキュメント内の変更されたフィールドのみを更新します。  | 
|   `ReplicateShardCollections`   |  `true` `false`  |  true の場合、 はデータをシャードコレクションに AWS DMS レプリケートします。ターゲットエンドポイントが DocumentDB エラスティッククラスターである AWS DMS 場合にのみ、 はこの設定を使用します。 この設定が true の場合、次の点に注意する。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  `false` の場合、変更ストリームと oplog 間の検証を無効にします。  このようなシナリオでは、デフォルトの DMS 動作でタスクが失敗するため、変更ストリームと oplog エントリの間に不一致が発生した場合、オペレーションが実行されない可能性があります。デフォルト: `true`。   | 
|  `useOplog`  |  `true` `false`  |  `true` の場合、DMS タスクは変更ストリームを使用するのではなく、「oplog」から直接読み取ることができます。デフォルト: `false`。  | 

**ドキュメント**を**メタデータモード**として選択した場合、さまざまなオプションを利用できます。

ターゲット エンドポイントが DocumentDB の場合は、**ドキュメントモード**で移行を実行し、また、ソース エンドポイントを変更し、**[\$1id as separate column]** (\$1id を個別の列として) オプションを選択します。ソースの MongoDB ワークロードにトランザクションが含まれる場合、これは必須の前提条件です。

## MongoDB のソースデータ型
<a name="CHAP_Source.MongoDB.DataTypes"></a>

MongoDB を のソースとして使用するデータ移行は、ほとんどの MongoDB データ型 AWS DMS をサポートします。次の表に、 の使用時にサポートされる MongoDB ソースデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示します。MongoDB データ型の詳細については、『MongoDB のドキュメント』の「[BSON 型](https://docs.mongodb.com/manual/reference/bson-types)」をご参照ください。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

 AWS DMS データ型の詳細については、「」を参照してください[AWS Database Migration Service のデータ型](CHAP_Reference.DataTypes.md)。


|  MongoDB データ型  |  AWS DMS データ型  | 
| --- | --- | 
| ブール値 | Bool | 
| バイナリ | BLOB | 
| 日付 | 日付 | 
| タイムスタンプ | 日付 | 
| Int | INT4 | 
| Long | INT8 | 
| Double | REAL8 | 
| String (UTF-8) | CLOB | 
| 配列 | CLOB | 
| OID | String | 
| REGEX | CLOB | 
| コード | CLOB | 