

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

# Couchbase サーバーからの移行
<a name="migration-from-couchbase"></a>

**Topics**
+ [序章](#introduction)
+ [Amazon DocumentDB との比較](#comparison-to-amazon-documentdb)
+ [発見](#discovery)
+ [計画](#planning)
+ [移行](#migration)
+ [検証](#validation)

## 序章
<a name="introduction"></a>

このガイドでは、Couchbase Server から Amazon DocumentDB への移行時に考慮すべき重要なポイントについて説明します。ここでは、移行の検出、計画、実行、検証の各フェーズに関する考慮事項について説明します。また、オフライン移行とオンライン移行を実行する方法についても説明します。

## Amazon DocumentDB との比較
<a name="comparison-to-amazon-documentdb"></a>


|  | **Couchbase サーバー** | ** Amazon DocumentDB** | 
| --- | --- | --- | 
| データ組織 | バージョン 7.0 以降では、データはバケット、スコープ、コレクションに整理されます。以前のバージョンでは、データはバケットに整理されています。 | データはデータベースとコレクションに整理されます。 | 
| 互換性 | サービスごとに個別の APIs (データ、インデックス、検索など) があります。セカンダリルックアップは、ANSI 標準 SQL に基づくクエリ言語である SQL\+\+ (以前は N1QL と呼ばれていました) を使用するため、多くの開発者が使い慣れています。 | Amazon DocumentDB は [ MongoDB API と互換性](compatibility.html)があります。 | 
| アーキテクチャ | ストレージは各クラスターインスタンスにアタッチされます。コンピューティングをストレージとは別にスケールすることはできません。 | Amazon DocumentDB は、クラウド向けに設計されており、従来のデータベースアーキテクチャの制限を回避します。[コンピューティングレイヤーとストレージレイヤーは Amazon DocumentDB で分離](db-clusters-understanding.html)され、コンピューティングレイヤーは[ストレージとは別にスケーリング](how-it-works.html)できます。 Amazon DocumentDB  | 
| オンデマンドで読み取りキャパシティを追加する | クラスターは、インスタンスを追加することでスケールアウトできます。ストレージはサービスが実行されているインスタンスにアタッチされるため、スケールアウトにかかる時間は、新しいインスタンスに移動するか、再調整する必要があるデータの量によって異なります。 | Amazon DocumentDB クラスターに[最大 15 個の Amazon DocumentDB レプリカを作成することで、Amazon DocumentDB ](db-cluster-manage-performance.html#db-cluster-manage-scaling-reads) クラスターの読み取りスケーリングを実現できます。ストレージレイヤーには影響しません。 | 
| ノード障害からの迅速な復旧 | クラスターには自動フェイルオーバー機能がありますが、クラスターを完全な強度に戻す時間は、新しいインスタンスに移動する必要があるデータの量によって異なります。 | Amazon DocumentDB は、通常 30 秒以内に[プライマリをフェイルオーバー](failover.html)し、クラスター内のデータ量に関係なく、8～10 分でクラスターを完全な強度に戻すことができます。 | 
| データの増加に応じてストレージをスケールする | セルフマネージド型クラスターの場合、ストレージと IOs は自動的にスケーリングされません。 | Amazon DocumentDB [ストレージと IOsスケーリングされます](db-cluster-manage-performance.html#db-cluster-manage-scaling-storage)。 | 
| パフォーマンスに影響を与えずにデータをバックアップする | バックアップはバックアップサービスによって実行され、デフォルトでは有効になっていません。ストレージとコンピューティングは分離されていないため、パフォーマンスに影響を与える可能性があります。 | Amazon DocumentDB バックアップはデフォルトで有効になっており、オフにすることはできません。バックアップはストレージレイヤーによって処理されるため、コンピューティングレイヤーには影響しません。Amazon DocumentDB は[、クラスタースナップショットからの復元](backup_restore-restore_from_snapshot.html)と[特定の時点への復元](backup_restore-point_in_time_recovery.html)をサポートしています。 | 
| データ耐久性 | クラスター内のデータには最大 3 つのレプリカコピーがあり、合計 4 つのコピーがあります。データサービスが実行されている各インスタンスには、アクティブなデータのコピーが 1、2、または 3 つあります。 | Amazon DocumentDB は、書き込みクォーラムが 4 のコンピューティングインスタンスの数に関係なく、データの 6 つのコピーを保持し、true のままにします。ストレージレイヤーがデータのコピーを 4 つ保持すると、クライアントは確認を受け取ります。 | 
| 整合性 | K/V オペレーションの即時整合性がサポートされています。Couchbase SDK は、データのアクティブなコピーを含む特定のインスタンスに K/V リクエストをルーティングするため、更新が確認されると、クライアントはその更新を読み取ることが保証されます。他のサービス (インデックス、検索、分析、イベント) への更新のレプリケーションは、結果整合性があります。 | Amazon DocumentDB レプリカは結果整合性があります。即時整合性読み取りが必要な場合、クライアントはプライマリインスタンスから読み取ることができます。 | 
| レプリケーション | Cross-Data Center Replication (XDCR) は、多対多トポロジでデータのフィルタリングされたアクティブ/パッシブ/アクティブ/アクティブレプリケーションを提供します。 | [Amazon DocumentDB グローバルクラスターは、](global-clusters.html)1:多 (最大 10) トポロジでアクティブ/パッシブレプリケーションを提供します。 | 

## 発見
<a name="discovery"></a>

Amazon DocumentDB に移行するには、既存のデータベースワークロードを完全に理解する必要があります。ワークロード検出は、Couchbase クラスターの設定と、データセット、インデックス、ワークロードなどの運用特性を分析し、中断を最小限に抑えながらシームレスな移行を確保するプロセスです。

### クラスターの設定
<a name="cluster-configuration"></a>

Couchbase は、各機能がサービスに対応するサービス中心のアーキテクチャを使用します。Couchbase クラスターに対して次のコマンドを実行して、どのサービスが使用されているかを判断します ([「Getting Information on Nodes](https://docs.couchbase.com/server/current/rest-api/rest-node-get-info.html)」を参照）。

```
curl -v -u <administrator>:<password> \
  http://<ip-address-or-hostname>:<port>/pools/nodes | \
  jq '[.nodes[].services[]] | unique'
```

サンプル出力:

```
[
  "backup",
  "cbas",
  "eventing",
  "fts",
  "index",
  "kv",
  "n1ql"
]
```

Couchbase サービスには以下が含まれます。

#### データサービス (kv)
<a name="data-service-kv"></a>

データサービスは、メモリとディスクのデータへの読み取り/書き込みアクセスを提供します。

Amazon DocumentDB は、[MongoDB API](java-crud-operations.html) を介した JSON データに対する K/V オペレーションをサポートしています。

#### クエリサービス (n1ql)
<a name="query-service-n1ql"></a>

クエリサービスは、SQL\+\+ を介した JSON データのクエリをサポートします。

Amazon DocumentDB は、MongoDB API を介した JSON データのクエリをサポートしています。

#### インデックスサービス (インデックス)
<a name="index-service-index"></a>

インデックスサービスは、データのインデックスを作成および維持し、クエリを高速化します。

Amazon DocumentDB は、デフォルトのプライマリインデックスと、MongoDB API を介した JSON データへのセカンダリインデックスの作成をサポートしています。

#### 検索サービス (fts)
<a name="search-service-fts"></a>

検索サービスは、全文検索のインデックスの作成をサポートしています。

Amazon DocumentDB のネイティブフルテキスト検索機能を使用すると、MongoDB API を介して[特殊目的のテキストインデックスを使用して、大きなテキストデータセットに対してテキスト検索を実行できます](text-search.html)。高度な検索のユースケースでは、[Amazon DocumentDB ゼロ ETL と Amazon OpenSearch Service の統合](https://aws.amazon.com/blogs/big-data/amazon-documentdb-zero-etl-integration-with-amazon-opensearch-service-is-now-available/)により、Amazon DocumentDB データに対してあいまい検索、クロスコレクション検索、多言語検索などの高度な検索機能が提供されます。

#### 分析サービス (cbas)
<a name="analytics-service-cbas"></a>

分析サービスは、JSON データをほぼリアルタイムで分析することをサポートしています。

Amazon DocumentDB は、MongoDB API を介した JSON データに対するアドホッククエリをサポートしています。[Amazon EMR でAmazon DocumentDB の JSON データに対して複雑なクエリを実行](https://aws.amazon.com/blogs/database/run-complex-queries-on-massive-amounts-of-data-stored-on-your-amazon-documentdb-clusters-using-apache-spark-running-on-amazon-emr/)することもできます。

#### イベントサービス (イベント)
<a name="eventing-service-eventing"></a>

イベントサービスは、データ変更に応じてユーザー定義のビジネスロジックを実行します。

Amazon DocumentDB は、[Amazon DocumentDB クラスターでデータが変更されるたびに AWS Lambda 関数を呼び出すことで、イベント駆動型のワークロードを自動化します](https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb-tutorial.html)。

#### バックアップサービス (バックアップ)
<a name="backup-service-backup"></a>

バックアップサービスは、完全および増分データバックアップと以前のデータバックアップのマージをスケジュールします。

Amazon DocumentDB は、1～35 日間の保持期間でデータを Amazon S3 に継続的にバックアップするため、バックアップ保持期間内の任意の時点にすばやく復元できます。Amazon DocumentDB は、この継続的なバックアッププロセスの一環として、データの自動スナップショットも取得します。[Amazon DocumentDB のバックアップと復元は、 を使用して管理することもできます AWS Backup。](https://aws.amazon.com/blogs/storage/manage-backup-and-restore-of-amazon-documentdb-with-aws-backup/)

### 運用特性
<a name="operational-characteristics"></a>

[Discovery Tool for Couchbase](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/discovery-tool-for-couchbase) を使用して、データセット、インデックス、ワークロードに関する次の情報を取得します。この情報は、Amazon DocumentDB クラスターのサイズ設定に役立ちます。

#### データセット
<a name="data-set"></a>

このツールは、次のバケット、スコープ、およびコレクション情報を取得します。

1. バケット名

1. バケットタイプ

1. スコープ名

1. コレクション名

1. 合計サイズ (バイト)

1. 合計項目数

1. 項目サイズ (バイト)

#### インデックス
<a name="indexes"></a>

このツールは、すべてのバケットについて、次のインデックス統計とすべてのインデックス定義を取得します。Amazon DocumentDB は各コレクションのプライマリインデックスを自動的に作成するため、プライマリインデックスは除外されることに注意してください。

1. バケット名

1. スコープ名

1. コレクション名

1. インデックス名

1. インデックスサイズ (バイト)

#### ワークロード
<a name="workload"></a>

このツールは、K/V および N1QL クエリメトリクスを取得します。K/V メトリクス値はバケットレベルで収集され、SQL\+\+ メトリクスはクラスターレベルで収集されます。

ツールのコマンドラインオプションは次のとおりです。

```
python3 discovery.py \
  --username <source cluster username> \
  --password <source cluster password> \
  --data_node <data node IP address or DNS name> \
  --admin_port <administration http REST port> \
  --kv_zoom <get bucket statistics for specified interval> \
  --tools_path <full path to Couchbase tools> \
  --index_metrics <gather index definitions and SQL++ metrics> \
  --indexer_port <indexer service http REST port> \
  --n1ql_start <start time for sampling> \
  --n1ql_step <sample interval over the sample period>
```

コマンドの例を次に示します。

```
python3 discovery.py \
  --username username \
  --password ******** \
  --data_node "http://10.0.0.1" \
  --admin_port 8091 \
  --kv_zoom week \
  --tools_path "/opt/couchbase/bin" \
  --index_metrics true \
  --indexer_port 9102 \
  --n1ql_start -60000 \
  --n1ql_step 1000
```

K/V メトリクス値は、過去 1 週間の 10 分ごとのサンプルに基づきます ([HTTP メソッドと URI](https://docs.couchbase.com/server/current/rest-api/rest-bucket-stats.html#http-method-and-uri) を参照）。SQL\+\+ メトリクス値は、過去 60 秒間の 1 秒ごとのサンプルに基づきます ([「一般的なラベル](https://docs.couchbase.com/server/current/rest-api/rest-statistics-single.html#general-labels)」を参照）。コマンドの出力は次のファイルにあります。

**collection-stats.csv** – バケット、スコープ、コレクション情報

```
bucket,bucket_type,scope_name,collection_name,total_size,total_items,document_size
beer-sample,membase,_default,_default,2796956,7303,383
gamesim-sample,membase,_default,_default,114275,586,196
pillowfight,membase,_default,_default,1901907769,1000006,1902
travel-sample,membase,inventory,airport,547914,1968,279
travel-sample,membase,inventory,airline,117261,187,628
travel-sample,membase,inventory,route,13402503,24024,558
travel-sample,membase,inventory,landmark,3072746,4495,684
travel-sample,membase,inventory,hotel,4086989,917,4457
...
```

**index-stats.csv** – インデックス名とサイズ

```
bucket,scope,collection,index-name,index-size
beer-sample,_default,_default,beer_primary,468144
gamesim-sample,_default,_default,gamesim_primary,87081
travel-sample,inventory,airline,def_inventory_airline_primary,198290
travel-sample,inventory,airport,def_inventory_airport_airportname,513805
travel-sample,inventory,airport,def_inventory_airport_city,487289
travel-sample,inventory,airport,def_inventory_airport_faa,526343
travel-sample,inventory,airport,def_inventory_airport_primary,287475
travel-sample,inventory,hotel,def_inventory_hotel_city,497125
...
```

**kv-stats.csv** – すべてのバケットのメトリクスを取得、設定、削除する

```
bucket,gets,sets,deletes
beer-sample,0,0,0
gamesim-sample,0,0,0
pillowfight,369,521,194
travel-sample,0,0,0
```

**n1ql-stats.csv** – SQL\+\+ クラスターのメトリクスを選択、削除、挿入する

```
selects,deletes,inserts
0,132,87
```

**indexes-<bucket-name>.txt** – バケット内のすべてのインデックスのインデックス定義。Amazon DocumentDB は各コレクションのプライマリインデックスを自動的に作成するため、プライマリインデックスは除外されることに注意してください。

```
CREATE INDEX `def_airportname` ON `travel-sample`(`airportname`)
CREATE INDEX `def_city` ON `travel-sample`(`city`)
CREATE INDEX `def_faa` ON `travel-sample`(`faa`)
CREATE INDEX `def_icao` ON `travel-sample`(`icao`)
CREATE INDEX `def_inventory_airport_city` ON `travel-sample`.`inventory`.`airport`(`city`)
CREATE INDEX `def_inventory_airport_faa` ON `travel-sample`.`inventory`.`airport`(`faa`)
CREATE INDEX `def_inventory_hotel_city` ON `travel-sample`.`inventory`.`hotel`(`city`)
CREATE INDEX `def_inventory_landmark_city` ON `travel-sample`.`inventory`.`landmark`(`city`)
CREATE INDEX `def_sourceairport` ON `travel-sample`(`sourceairport`)
...
```

## 計画
<a name="planning"></a>

計画フェーズでは、Amazon DocumentDB クラスターの要件を決定し、Couchbase バケット、スコープ、コレクションを Amazon DocumentDB データベースとコレクションにマッピングします。

### Amazon DocumentDB クラスターの要件
<a name="amazon-documentdb-cluster-requirements"></a>

検出フェーズで収集されたデータを使用して、Amazon DocumentDB クラスターのサイズを設定します。Amazon DocumentDB [クラスターのサイズ設定の詳細については、](best_practices.html#best_practices-instance_sizing)「インスタンスのサイズ設定」を参照してください。

### バケット、スコープ、コレクションをデータベースとコレクションにマッピングする
<a name="mapping-buckets-scopes-and-collections-to-databases-and-collections"></a>

Amazon DocumentDB クラスター (複数可) に存在するデータベースとコレクションを決定します。Couchbase クラスター内のデータの整理方法に応じて、次のオプションを検討してください。これらは唯一のオプションではありませんが、考慮すべき出発点となります。

#### Couchbase Server 6.x 以前
<a name="couchbase-6x-or-earlier"></a>

##### Couchbase バケットから Amazon DocumentDB コレクションへ
<a name="couchbase-buckets-to-amazon-documentdb-collections"></a>

各バケットを別の Amazon DocumentDB コレクションに移行します。このシナリオでは、Couchbase ドキュメント`id`値が Amazon DocumentDB `_id`値として使用されます。

![Couchbase Server 6.x 以前のバケットから Amazon DocumentDB コレクションへ](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/buckets-to-collections.png)


#### Couchbase Server 7.0 以降
<a name="couchbase-70-or-later"></a>

##### Couchbase コレクションから Amazon DocumentDB コレクションへ
<a name="couchbase-collections-to-amazon-documentdb-collections"></a>

各コレクションを別の Amazon DocumentDB コレクションに移行します。このシナリオでは、Couchbase ドキュメント`id`値が Amazon DocumentDB `_id`値として使用されます。

![Couchbase Server 7.0 以降のコレクションから Amazon DocumentDB コレクションへ](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/collections-to-collections.png)


## 移行
<a name="migration"></a>

### インデックスの移行
<a name="index-migration"></a>

Amazon DocumentDB への移行には、データだけでなくインデックスも転送してクエリパフォーマンスを維持し、データベースオペレーションを最適化する必要があります。このセクションでは、互換性と効率を確保しながら Amazon DocumentDB にインデックスを移行するための詳細なstep-by-stepプロセスの概要を説明します。

[Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html) を使用して、SQL\+\+ `CREATE INDEX`ステートメントを Amazon DocumentDB `createIndex()` コマンドに変換します。

1. Discovery Tool for Couchbase によって作成された **indexes-<bucket name>.txt** ファイル (複数可) をアップロードします。

1. 次のプロンプトを入力します。

   `Convert the Couchbase CREATE INDEX statements to Amazon DocumentDB createIndex commands`

Amazon Q は同等の Amazon DocumentDB `createIndex()` コマンドを生成します。[Couchbase バケット、スコープ、コレクションを Amazon DocumentDB コレクションにマッピングする方法に基づいて、コレクション](#mapping-buckets-scopes-and-collections-to-databases-and-collections)名を更新する必要がある場合があります。

例えば、次のようになります。

**indexes-beer-sample.txt**

```
CREATE INDEX `beerType` ON `beer-sample`(`type`)
CREATE INDEX `code` ON `beer-sample`(`code`) WHERE (`type` = "brewery")
```

Amazon Q 出力の例 (抜粋):

```
db.beerSample.createIndex(
  { "type": 1 },
  {
    "name": "beerType",
    "background": true
  }
)

db.beerSample.createIndex(
  { "code": 1 },
  {
    "name": "code",
    "background": true,
    "partialFilterExpression": { "type": "brewery" }
  }
)
```

Amazon Q が変換できないインデックスの詳細については、[Amazon DocumentDB インデックスとインデックスおよびインデックスプロパティの管理](managing-indexes.html)[mongo-apis.html#mongo-apis-index](mongo-apis.html#mongo-apis-index)」を参照してください。

### MongoDB APIs を使用するためのリファクタリングコード
<a name="refactor-code-to-use-the-mongodb-apis"></a>

クライアントは Couchbase SDKs を使用して Couchbase Server に接続します。Amazon DocumentDB クライアントは、MongoDB ドライバーを使用して Amazon DocumentDB に接続します。Couchbase SDKs でサポートされているすべての言語は、MongoDB ドライバーでもサポートされています。言語の[ドライバーの詳細については、MongoDB ](https://www.mongodb.com/docs/drivers/) ドライバー」を参照してください。

APIs は Couchbase Server と Amazon DocumentDB で異なるため、適切な MongoDB APIs を使用するようにコードをリファクタリングする必要があります。[Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html) を使用して、K/V API コールと SQL\+\+ クエリを同等の MongoDB APIsに変換できます。

1. ソースコードファイル (複数可) をアップロードします。

1. 次のプロンプトを入力します。

   `Convert the Couchbase API code to Amazon DocumentDB API code`

[Hello Couchbase](https://docs.couchbase.com/python-sdk/current/hello-world/start-using-sdk.html#hello-couchbase) Python コードサンプルを使用して、Amazon Q は以下を生成します (抜粋）。

```
from datetime import timedelta
from pymongo import MongoClient

# Connection parameters
database_name = "travel-sample"

# Connect to Amazon DocumentDB cluster
client = MongoClient('<Amazon DocumentDB connection string>')

# Get reference to database and collection
db = client['travel-sample']
airline_collection = db['airline']

# upsert document function
def upsert_document(doc):
    print("\nUpsert Result: ")
    try:
        # key will equal: "airline_8091"
        key = doc["type"] + "_" + str(doc["id"])
        doc['_id'] = key # Amazon DocumentDB uses _id as primary key
        result = airline_collection.update_one(
            {'_id': key},
            {'$set': doc},
            upsert=True
        )
        print(f"Modified count: {result.modified_count}")
    except Exception as e:
        print(e)

# get document function
def get_airline_by_key(key):
    print("\nGet Result: ")
    try:
        result = airline_collection.find_one({'_id': key})
        print(result)
    except Exception as e:
        print(e)

# query for document by callsign
def lookup_by_callsign(cs):
    print("\nLookup Result: ")
    try:
        result = airline_collection.find(
            {'callsign': cs},
            {'name': 1, '_id': 0}
        )
        for doc in result:
            print(doc['name'])
    except Exception as e:
        print(e)

# Test document
airline = {
    "type": "airline",
    "id": 8091,
    "callsign": "CBS",
    "iata": None,
    "icao": None,
    "name": "Couchbase Airways",
}

upsert_document(airline)
get_airline_by_key("airline_8091")
lookup_by_callsign("CBS")
```

Python[、Node.js、PHP、Go、Java、C\#/ で Amazon DocumentDB に接続する例](connect_programmatically.html)については、「プログラムによる Amazon DocumentDB への接続」を参照してください。NET、R、Ruby。

### 移行アプローチを選択する
<a name="select-the-migration-approach"></a>

Amazon DocumentDB にデータを移行する場合、次の 2 つのオプションがあります。

1. [オフライン移行](#offline-migration)

1. [オンライン移行](#online-migration)

#### オフライン移行
<a name="offline-migration"></a>

次の場合は、オフライン移行を検討してください。
+ **ダウンタイムは許容されます。**オフライン移行では、ソースデータベースへの書き込みオペレーションを停止し、データをエクスポートしてから Amazon DocumentDB にインポートします。このプロセスでは、アプリケーションのダウンタイムが発生します。アプリケーションまたはワークロードがこの使用不能期間を許容できる場合、オフライン移行は実行可能なオプションです。
+ **小規模なデータセットの移行または概念実証の実施:** 小規模なデータセットの場合、エクスポートとインポートのプロセスに必要な時間は比較的短く、オフライン移行は迅速かつ簡単な方法です。また、ダウンタイムの重要性が低い開発、テスト、proof-of-concept環境にも適しています。
+ **シンプルさが優先されます。**cbexport と mongoimport を使用するオフラインメソッドは、一般的にデータを移行するための最も簡単なアプローチです。これにより、オンライン移行方法に伴う変更データキャプチャ (CDC) の複雑さを回避できます。
+ **継続的な変更をレプリケートする必要はありません。**移行中にソースデータベースが変更をアクティブに受信していない場合、または移行プロセス中にそれらの変更をキャプチャしてターゲットに適用することが重要でない場合は、オフラインアプローチが適切です。

**Topics**
+ [Couchbase Server 6.x 以前](#couchbase-6x-or-earlier-offline)
+ [Couchbase Server 7.0 以降](#couchbase-70-or-later-offline)

##### Couchbase Server 6.x 以前
<a name="couchbase-6x-or-earlier-offline"></a>

##### Couchbase バケットから Amazon DocumentDB コレクションへ
<a name="couchbase-bucket-to-amazon-documentdb-collection-offline"></a>

[cbexport json ](https://docs-archive.couchbase.com/server/6.6/tools/cbexport-json.html)を使用してデータをエクスポートし、バケット内のすべてのデータの JSON ダンプを作成します。`--format` オプションには、 `lines`または を使用できます`list`。

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id
```

[mongoimport](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) と適切なオプションを使用して Amazon DocumentDB コレクションにデータをインポートし、行またはリストをインポートします。

行:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --file export.json
```

リスト:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --jsonArray \
  --file export.json
```

##### Couchbase Server 7.0 以降
<a name="couchbase-70-or-later-offline"></a>

オフライン移行を実行するには、cbexport ツールと mongoimport ツールを使用します。

##### デフォルトのスコープとデフォルトのコレクションを持つ Couchbase バケット
<a name="couchbase-bucket-with-default-scope-and-default-collection-offline"></a>

[cbexport json ](https://docs.couchbase.com/server/current/tools/cbexport-json.html)を使用してデータをエクスポートし、バケット内のすべてのコレクションの JSON ダンプを作成します。`--format` オプションには、 `lines`または を使用できます`list`。

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id
```

[mongoimport](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) と適切なオプションを使用して Amazon DocumentDB コレクションにデータをインポートし、行またはリストをインポートします。

行:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --file export.json
```

リスト:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --jsonArray \
  --file export.json
```

##### Couchbase コレクションから Amazon DocumentDB コレクションへ
<a name="couchbase-collections-to-amazon-documentdb-collections-offline"></a>

[cbexport json ](https://docs.couchbase.com/server/current/tools/cbexport-json.html)を使用してデータをエクスポートし、各コレクションの JSON ダンプを作成します。`--include-data` オプションを使用して、各コレクションをエクスポートします。`--format` オプションには、 `lines`または を使用できます`list`。`--scope-field` および `--collection-field`オプションを使用して、スコープとコレクションの名前を各 JSON ドキュメントの指定されたフィールドに保存します。

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --include-data <scope name>.<collection name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id \
  --scope-field "_scope" \
  --collection-field "_collection"
```

cbexport はエクスポートされたすべてのドキュメントに `_scope`および `_collection`フィールドを追加したため、検索および置換、`sed`、または任意の方法でエクスポートファイル内のすべてのドキュメントから削除できます。

[mongoimport](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) と行またはリストをインポートする適切なオプションを使用して、各コレクションのデータを Amazon DocumentDB コレクションにインポートします。

行:

```
mongoimport \
--db <database> \
--collection <collection> \
--uri "<Amazon DocumentDB cluster connection string>" \
--file export.json
```

リスト:

```
mongoimport \
--db <database> \
--collection <collection> \
--uri "<Amazon DocumentDB cluster connection string>" \
--jsonArray \
--file export.json
```

#### オンライン移行
<a name="online-migration"></a>

ダウンタイムを最小限に抑え、継続的な変更をほぼリアルタイムで Amazon DocumentDB にレプリケートする必要がある場合は、オンライン移行を検討してください。

Amazon [ Amazon DocumentDB へのライブ移行を実行する方法については、「Couchbase から Amazon](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) Amazon DocumentDB へのライブ移行を実行する方法」を参照してください。このドキュメントでは、ソリューションをデプロイし、Amazon DocumentDB クラスターへのバケットのライブ移行を実行する方法について説明します。

**Topics**
+ [Couchbase Server 6.x 以前](#couchbase-6x-or-earlier-online)
+ [Couchbase Server 7.0 以降](#couchbase-70-or-later-online)

##### Couchbase Server 6.x 以前
<a name="couchbase-6x-or-earlier-online"></a>

##### Couchbase バケットから Amazon DocumentDB コレクションへ
<a name="couchbase-bucket-to-amazon-documentdb-collection-online"></a>

[Couchbase の移行ユーティリティ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase)は、Couchbase バケットの Amazon DocumentDB コレクションへのオンライン移行を実行するように事前設定されています。[シンクコネクタ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml)の設定を見ると、 `document.id.strategy`パラメータはメッセージキー値を`_id`フィールド値として使用するように設定されています ([「シンクコネクタ ID Strategy Properties](https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/id-strategy/#std-label-sink-configuration-id-strategy)」を参照）。

```
ConnectorConfiguration:
  document.id.strategy: 'com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy'
```

##### Couchbase Server 7.0 以降
<a name="couchbase-70-or-later-online"></a>

##### デフォルトのスコープとデフォルトのコレクションを持つ Couchbase バケット
<a name="couchbase-bucket-with-default-scope-and-default-collection-online"></a>

[Couchbase の移行ユーティリティ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase)は、Couchbase バケットの Amazon DocumentDB コレクションへのオンライン移行を実行するように事前設定されています。[シンクコネクタ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml)の設定を見ると、 `document.id.strategy`パラメータはメッセージキー値を`_id`フィールド値として使用するように設定されています ([「シンクコネクタ ID Strategy Properties](https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/id-strategy/#std-label-sink-configuration-id-strategy)」を参照）。

```
ConnectorConfiguration:
  document.id.strategy: 'com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy'
```

##### Couchbase コレクションから Amazon DocumentDB コレクションへ
<a name="couchbase-collections-to-amazon-documentdb-collections-online"></a>

各スコープ内の各 Couchbase コレクションを個別のトピックにストリーミングするように[ソースコネクタ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml)を設定します ([「ソース設定オプション](https://docs.couchbase.com/kafka-connector/current/source-configuration-options.html#couchbase.collections)」を参照）。例えば、次のようになります。

```
ConnectorConfiguration:
  # add couchbase.collections configuration
  couchbase.collections: '<scope 1>.<collection 1>, <scope 1>.<collection 2>, ...'
```

各トピックから個別の Amazon DocumentDB コレクションにストリーミングするように[シンクコネクタ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml)を設定します ([「シンクコネクタ設定プロパティ](https://github.com/mongodb-labs/mongo-kafka/blob/master/docs/sink.md#sink-connector-configuration-properties)」を参照）。例えば、次のようになります。

```
ConnectorConfiguration:
  # remove collection configuration  
  #collection: 'test'
  
  # modify topics configuration
  topics: '<bucket>.<scope 1>.<collection 1>, <bucket>.<scope 1>.<collection 2>, ...'

  # add topic.override.%s.%s configurations for each topic 
  topic.override.<bucket>.<scope 1>.<collection 1>.collection: '<collection>'
  topic.override.<bucket>.<scope 1>.<collection 2>.collection: '<collection>'
```

## 検証
<a name="validation"></a>

このセクションでは、Amazon DocumentDB に移行した後のデータ整合性と整合性を検証するための詳細な検証プロセスについて説明します。検証ステップは、移行方法に関係なく適用されます。

**Topics**
+ [すべてのコレクションがターゲットに存在することを確認する](#validation-checklist-step-1)
+ [ソースクラスターとターゲットクラスター間のドキュメント数を検証する](#validation-checklist-step-2)
+ [ソースクラスターとターゲットクラスター間でドキュメントを比較する](#validation-checklist-step-3)

### すべてのコレクションがターゲットに存在することを確認する
<a name="validation-checklist-step-1"></a>

#### Couchbase ソース
<a name="source-verify-collections"></a>

オプション 1: クエリワークベンチ

```
SELECT RAW `path`
  FROM system:keyspaces
  WHERE `bucket` = '<bucket>'
```

オプション 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html) ツール

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT RAW `path`
       FROM system:keyspaces
       WHERE `bucket` = '<bucket>'"
```

#### Amazon DocumentDB ターゲット
<a name="target-verify-collections"></a>

mongosh ([Amazon DocumentDB クラスターに接続する](connect-ec2-manual.html#manual-connect-ec2.connect-use)」を参照):

```
db.getSiblingDB('<database>')
db.getCollectionNames()
```

### ソースクラスターとターゲットクラスター間のドキュメント数を検証する
<a name="validation-checklist-step-2"></a>

#### Couchbase ソース
<a name="source-verify-document-count"></a>

##### Couchbase Server 6.x 以前
<a name="source-verify-document-count-couchbase-6x-or-earlier"></a>

オプション 1: クエリワークベンチ

```
SELECT COUNT(*)
FROM `<bucket>`
```

オプション 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket:>`"
```

##### Couchbase Server 7.0 以降
<a name="source-verify-document-count-couchbase-70-or-later"></a>

オプション 1: クエリワークベンチ

```
SELECT COUNT(*)
FROM `<bucket>`.`<scope>`.`<collection>`
```

オプション 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket:>`.`<scope>`.`<collection>`"
```

#### Amazon DocumentDB ターゲット
<a name="target-verify-document-count"></a>

mongosh ([Amazon DocumentDB クラスターに接続する](connect-ec2-manual.html#manual-connect-ec2.connect-use)」を参照):

```
db = db.getSiblingDB('<database>')
db.getCollection('<collection>').countDocuments()
```

### ソースクラスターとターゲットクラスター間でドキュメントを比較する
<a name="validation-checklist-step-3"></a>

#### Couchbase ソース
<a name="source-compare-documents"></a>

##### Couchbase Server 6.x 以前
<a name="source-compare-documents-couchbase-6x-or-earlier"></a>

オプション 1: クエリワークベンチ

```
SELECT META().id as _id, *
FROM `<bucket>`
LIMIT 5
```

オプション 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> 
  -u <username> \
  -p <password> \
  -q "SELECT META().id as _id, *
       FROM `<bucket>` \
       LIMIT 5"
```

##### Couchbase Server 7.0 以降
<a name="source-compare-documents-couchbase-70-or-later"></a>

オプション 1: クエリワークベンチ

```
SELECT COUNT(*)
FROM `<bucket>`.`<scope>`.`<collection>`
```

オプション 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket:>`.`<scope>`.`<collection>`"
```

#### Amazon DocumentDB ターゲット
<a name="target-compare-documents"></a>

mongosh ([Amazon DocumentDB クラスターに接続する](connect-ec2-manual.html#manual-connect-ec2.connect-use)」を参照):

```
db = db.getSiblingDB('<database>')
db.getCollection('<collection>').find({
  _id: {
    $in: [
      <_id 1>, <_id 2>, <_id 3>, <_id 4>, <_id 5>
    ]
  }
})
```