Amazon Web Services ブログ

オフラインの方法を使用して、MongoDB から Amazon DocumentDB に移行する



Amazon DocumentDB (MongoDB 互換) は、MongoDB のワークロードをサポートする高速でスケーラブル、かつ可用性に優れた完全マネージド型のドキュメント データベース サービスです。Amazon DocumentDB 移行ガイドでは、MongoDB から Amazon DocumentDB に移行するための 3 つの主要なアプローチ (オフラインオンラインハイブリッド) の概要を説明しています。

オフラインでの移行のアプローチは、3 つのうち最速で最も簡単な方法ですが、停止時間が最も長くなります。このアプローチは、概念実証、ワークロードの開発およびテスト、およびダウンタイムが主な懸念ではない本稼働のワークロードに適しています。移行に関する 3 回シリーズの第 1 回では、オフラインのアプローチを使用して、Amazon EC2 上の MongoDB レプリカセットから Amazon DocumentDB クラスターにデータを移行します。

オフライン移行の概要

次の図は、MongoDB から Amazon DocumentDB へのオフライン移行を示しています。

このアプローチには、5 つの基本的な手順があります。

  1. ソース MongoDB デプロイメントへのアプリケーションによる書き込みを停止します。
  2. mongodump ツールを使用して、インデックスとデータを EC2 インスタンスにダンプします。
  3. (オプション) Amazon DocumentDB インデックスツールを使用して、Amazon DocumentDB クラスターにインデックスを復元します。
  4. mongorestore ツールを使用して、データを Amazon DocumentDB クラスターに復元します。
  5. アプリケーションの接続文字列を変更して、Amazon DocumentDB クラスターを指すようにします。

移行の準備

このオフライン移行を実行するには、次の 3 つのコンポーネントが必要です。

  1. ソース MongoDB デプロイメント
  2. データをエクスポートおよびインポートするための EC2 インスタンス
  3. ターゲットの Amazon DocumentDB クラスター

Amazon DocumentDB クラスターに移行する前に、ソース MongoDB デプロイメントへのアプリケーションによる書き込みを停止します。この手順は、DocumentDB クラスターへの移行中に移行元のデータが変更されないようにするために必要です。ソース MongoDB デプロイメントは、Amazon EC2 にデプロイされたレプリカセットです。このレプリカセットのワークロードに対する移行による影響を最小限に抑えるために、セカンダリインスタンスからデータをエクスポートします。

注意: 移行元の MongoDB が 3.6 より前のバージョンの MongoDB を使用している場合は、ソースデプロイメントとアプリケーションドライバーをアップグレードする必要があります。Amazon DocumentDB を使用するには、少なくとも MongoDB 3.6 と互換である必要があります。

MongoDB シェルで以下を実行することで、ソースデプロイメントのバージョンを確認できます。

rs0:PRIMARY> db.version()
3.6.9

次に示すように、Amazon DocumentDB コンソールを使用して、移行対象として Amazon DocumentDB クラスターを作成します。

データの復元にかかる時間は、ターゲットクラスターのプライマリインスタンスのサイズによってある程度決まります。最高のインポートスループットを達成するために、この AWS リージョンで Amazon DocumentDB によってサポートされる最大サイズである単一の r4.16xlarge インスタンスを作成します。インスタンスサイズがより小さくても機能しますが、データのインポートに時間がかかる場合があります。データを移行した後は、必要に応じてプライマリインスタンスを別のインスタンスサイズに変更することができます。その後、読み取りのスケーリングと高可用性のためにリードレプリカを追加することができます。

最後のコンポーネントは、エクスポートとインポートのプロセスを実行する EC2 インスタンスです (移行インスタンス)。移行インスタンスの Amazon EBS ボリュームが、エクスポートされたデータを保持するのに十分な大きさであることを確認することが重要です。mongo シェルで db.stats() コマンドを実行し、storageSize の値を調べることで、データベースのサイズの概算バイト数を取得できます。

移行インスタンスには、mongodump ツールおよび mongorestore ツールとともに mongo シェルが必要です。最低でも、mongodb-org-shell パッケージと mongodb-org-tools パッケージをインストールする必要があります。(手順については、MongoDB のドキュメントを参照してください。)

Amazon DocumentDB はデフォルトで Transport Layer Security (TLS) 暗号化を使用するため、mongo シェルを使用して接続するには Amazon RDS 認証局 (CA) ファイルもダウンロードする必要があります。

Amazon Elastic Compute Cloud (EC2)$ curl -O https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

(TLS を無効にすることもできます。詳細については 、Amazon DocumentDB 開発者ガイドTLS を使用した接続の暗号化を参照してください。)

シェルおよびツールをインストールした後、移行インスタンスがソースインスタンスとターゲットの Amazon DocumentDB クラスターの両方と通信できることを確認します。次のようにそれぞれに接続し、ping コマンドを実行してこれを行います。

ソースレプリカセットインスタンスに接続する方法:

Amazon Elastic Compute Cloud (EC2)$ mongo --host my-secondary-hostname \
--username myuser --password mypassword
…
rs0:PRIMARY> db.runCommand('ping')
{ "ok" : 1 }

Amazon DocumentDB クラスターに接続する方法:

Amazon Elastic Compute Cloud (EC2)$ mongo --ssl --host docdb-cluster-endpoint \
--sslCAFile rds-combined-ca-bundle.pem --username myuser \
--password mypassword
…
rs0:PRIMARY> db.runCommand('ping')
{ "ok" : 1 }

ソースインスタンスまたは Amazon DocumentDB クラスターに接続できない場合は、セキュリティグループの設定を確認します。EC2 インスタンスが、使用している MongoDB ポート (デフォルトでは 27017) で両方に接続するアクセス許可を持っていることを確認します。その他のトラブルシューティングオプションについては、Amazon DocumentDB のドキュメントを参照してください。

mongodump を使用したデータのダンプ

接続が確立されると、mongodump ツールを使用してデータとインデックスを EC2 移行インスタンスにエクスポートすることができます。セカンダリに –-readPreference オプションを設定して、ダンプを強制的にセカンダリレプリカセットメンバーに接続させます。この手順により、ソースデプロイメントに対する mongodump の潜在的な影響が軽減されます。--readPreference オプションを使用するには、replicaSetName/replicasetMember の形式でレプリカセットメンバーに接続する必要があります。

Amazon Elastic Compute Cloud (EC2)$ mongodump --host rs0/myhost --username user \
--password password --db books --authenticationDatabase admin \
--readPreference secondary
2019-03-19T00:16:57.095+0000	writing books.j to
2019-03-19T00:16:57.095+0000	writing books.a to
2019-03-19T00:16:57.424+0000	done dumping books.j (100000 documents)
2019-03-19T00:16:57.445+0000	done dumping books.a (100000 documents)
…

データのエクスポートにかかる時間は、ソースデータセットのサイズ、移行インスタンスと移行元の間のネットワークの速度、および移行インスタンスのリソースによって異なります。

Amazon DocumentDB インデックスツールを使用したインデックスの復元

オフライン移行には必要ありませんが、Amazon DocumentDB インデックスツールを使用して、ダンプされたインデックスの互換性を確認し、ターゲットの Amazon DocumentDB クラスター上にインデックスを事前に作成することもできます。インデックスを事前に作成すると、データを mongorestore で復元した後ではなく、復元中に並行してインデックスを作成できるため、全体的な復元時間を大幅に短縮できます。

このツールを入手するには、Amazon DocumentDB Tools GitHub リポジトリを複製し、README.md の指示に従ってください。

Amazon DocumentDB インデックスツールをインストールすると、それを使用してインデックス定義に非互換性がないことを確認できます。

Amazon Elastic Compute Cloud (EC2)$ python migrationtools/documentdb_index_tool.py –-show-issues –-dir <dump_dir>

ここで、インデックスツールを使用してターゲットの Amazon DocumentDB クラスターにインデックスを作成することができます。

Amazon Elastic Compute Cloud (EC2)$ python migrationtools/documentdb_index_tool.py –-restore-indexes –-dir <dump_dir> --host docdb-cluster-endpoint –-tls –-tls-ca-file rds-combined-ca-bundle.pem --username myuser --password mypassword

mongorestore を使ったクラスターへのデータの復元

インデックスを事前に作成し、mongorestore ツールを使用して、エクスポートしたデータをターゲットの Amazon DocumentDB クラスターに復元します。mongorestore を –-numInsertionWorkersPerCollection オプションで使って、インポートを並列化することができます。このオプションを Amazon DocumentDB クラスターのプライマリインスタンスの vCPU の数に設定することから始めるのが良いでしょう。このクラスタのプライマリインスタンスサイズは r4.16xlarge であり、64 の vCPU があるため、値 64 を使用します。Amazon DocumentDB インデックスツールを使用してインデックスを事前に作成したので、インデックスを 2 回作成しないように –-noIndexRestore オプションを渡します。

Amazon Elastic Compute Cloud (EC2)$ mongorestore --host docdb-cluster-endpoint –-ssl –-sslCAFile rds-combined-ca-bundle.pem --username myuser --password mypassword – numInsertionWorkersPerCollection 64 --noIndexRestore <dump_dir>

注意: 完全な mongodump を実行した場合 (つまり、ダンプするデータベースを指定するために --db オプションを使用しなかった場合)、結果のダンプディレクトリから admin ディレクトリを削除する必要があります。そうしないと、Amazon DocumentDB に復元しようとしたときにエラーが発生します。

Amazon DocumentDB クラスターを指す

データの復元が完了すると、Amazon DocumentDB クラスターを使用するようにアプリケーションのデータベース接続文字列を変更する準備は整っています。詳細については 、Amazon DocumentDB 開発者ガイドAmazon DocumentDB エンドポイントの操作を参照してください。

まとめ

この 3 回シリーズの第 1 回では、MongoDB から Amazon DocumentDB にデータを移行するためのオフラインアプローチの基本的な手順について説明しました。Amazon DocumentDB への移行時の他の考慮事項ならびに、その他の移行アプローチに関する情報は、Amazon DocumentDB 移行ガイドにあります。

このブログ記事に質問やご意見がある場合は、本ページのコメント欄に記入してください。


著者について

Jeff Duffy は、アマゾン ウェブ サービスの NoSQL スペシャリストソリューションアーキテクトであり、Amazon DocumentDB を専門としています。