Amazon Web Services ブログ

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

Amazon DocumentDB (MongoDB 互換) は、MongoDB のワークロードをサポートする高速でスケーラブル、かつ可用性に優れた完全マネージドのドキュメントデータベースサービスです。お客様は、基盤となるインフラストラクチャの管理を気にすることなく、現在ご使用のものと同じ MongoDB 3.6 向けのアプリケーションコード、ドライバー、ツールを、そのまま Amazon DocumentDB 上でワークロードを実行、管理、そしてスケールするのに使えます。ドキュメントデータベースである Amazon DocumentDB は、JSON データの保存、クエリ、およびインデックスを容易にします。

MongoDB から Amazon DocumentDB に移行するには、オフライン、オンラインハイブリッドの 3 つの主なアプローチがあります。詳細については、Amazon DocumentDB への移行を参照してください。

この投稿では、オンラインアプローチを使用して、オンプレミス、あるいは EC2 にホストされた自己管理型の MongoDB クラスターを Amazon DocumentDB に移行する方法について説明します。オンラインのアプローチがダウンタイムを最小限に抑えます。これは、DMS が移行元の MongoDB の oplog から継続的に読み込み、ソース の Amazon DocumentDB クラスターにほぼリアルタイムでそれらの変更を適用するからです。オンラインの方法のデモについては、Video: Live migration to Amazon DocumentDBをご覧ください。

ダウンタイムを最小限に抑え、ソースデータセットが小さい (1 TB 未満) 場合は、オンライン方法が最適です。データセットが 1 TB より大きい場合は、ハイブリッドまたはオフラインのアプローチを使用して、mongorestore で実現できる並列化と高速化を利用する必要があります。オフラインの方法での移行の詳細については、「オフラインの方法を使用して、MongoDB から Amazon DocumentDB に移行する」をご参照ください。

この投稿では、オンラインのアプローチを使用して、Amazon EC2 でホストされている MongoDB レプリカセットから Amazon DocumentDB クラスターにデータを移行する方法を紹介します。

前提条件

移行を開始する前に、次の前提条件を完了してください。

  1. ソースのバージョンと構成を確認する
  2. Amazon DocumentDB クラスターのサイズをセットアップして選択する
  3. EC2 インスタンスの設定を行う

ソースバージョンと構成の確認

移行元の MongoDB が MongoDB 3.6 より前のバージョンを使用している場合は、ソースデプロイメントとアプリケーションドライバーをアップグレードする必要があります。Amazon DocumentDB に移行するには、これらは MongoDB 3.6 との互換性が必要です。mongo シェルに次のコードを追記すると、ソースデプロイメントのバージョンを確認できます。

mongoToDocumentDBOnlineSet1:PRIMARY> db.version()
3.4.4

また、移行元の MongoDB クラスター (またはインスタンス) がレプリカセットとして構成されていることを確認します。次のコードを使えば、MongoDB クラスターがレプリカセットとして構成されているかどうかを確認できます。

db.adminCommand( { replSetGetStatus : 1 } )

出力が 「” errmsg “:” not running with –replSet “」のようなエラーメッセージが出た場合、クラスターがレプリカセットとして構成されていません。

ソースの Amazon DocumentDB クラスター のセットアップとサイズ設定

この投稿では、ターゲットの Amazon DocumentDB クラスターは、単一の db.r5.large インスタンスで作成したレプリカセットです。クラスターのサイズを決定するには、実稼働クラスタに適したインスタンスタイプを選択してください。Amazon DocumentDB インスタンスとコストの詳細については、「Amazon DocumentDB (MongoDB 互換) 料金」をご参照ください。

EC2 インスタンスのセットアップ

Amazon DocumentDB クラスターに接続して、インデックスや移行中の他のタスクを移行するには、クラスターと同じ VPC に EC2 インスタンスを作成し、mongo シェルをインストールします。手順については、「Amazon DocumentDB の開始方法」をご参照ください。Amazon DocumentDB への接続を確認するには、次の CLI コマンドを入力します。

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

ソースインスタンスまたは Amazon DocumentDB クラスターへの接続に問題がある場合は、両方のセキュリティグループの設定を確認して、EC2 インスタンスに正しいポート (デフォルトでは27017) で接続する権限があることを確認してください。トラブルシューティングの詳細情報については、「 Amazon DocumentDB のトラブルシューティング」をご参照ください。

Amazon DocumentDB はデフォルトでTransport Layer Security (TLS) 暗号化を使用します。TLS 暗号化コレクションを介して接続するには、認証機関 (CA) ファイルをダウンロードして、mongo シェルを使用して接続します。次のコードをご覧ください。

Amazon Elastic Compute Cloud (EC2)$ curl -O <a href="https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem">https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem</a>

TLS を無効にすることもできます。詳細については「転送中のデータの暗号化」をご参照ください。

オンライン移行手順

次の図は、オンライン移行プロセスの 5 つのステップを示しています。手順は次のとおりです。

  1. アプリケーションが引き続きソースに書き込む
  2. Amazon DocumentDB インデックスツールを使用してインデックスをダンプする
  3. Amazon DocumentDB インデックスツールを使用してインデックスを復元する
  4. AWS DMSでフルロードを実行し、データをレプリケートする
  5. アプリケーションのエンドポイントを Amazon DocumentDB クラスターに変更する

ステップ 1: アプリケーションによるソースへの書き込み

オンラインの方式を使って Amazon DocumentDB に移行する場合、アプリケーションは引き続き移行元の MongoDB データベースに書き込みます。ステップ 5 では、ソースデータベースへの書き込みを中止し、ターゲットの Amazon DocumentDB クラスターを指すようにアプリケーションを変更する方法について説明します。

ステップ 2: Amazon DocumentDB インデックスツールを使用したインデックスのダンプ

移行を開始する前に、ターゲットの Amazon DocumentDB クラスターに、移行元の MongoDB クラスターと同じインデックスを作成します。AWS DMS はデータの移行を処理しますが、インデックスは移行しません。インデックスを移行するには、前提条件として作成した EC2 インスタンスで、Amazon DocumentDB インデックスツールを使用して、MongoDB クラスターからインデックスをエクスポートします。Amazon DocumentDB ツールの GitHub リポジトリのクローンを作成して、README.md の指示に従ってください。

次のコードは、移行元の MongoDB クラスターからインデックスを EC2 インスタンスのディレクトリにダンプします (この投稿で提供されているサンプルのユーザー名とパスワードは、説明のみを目的としています。常に強力なパスワードを選択してください) 。:

python migrationtools/documentdb_index_tool.py --dump-indexes 
--dir ~/index.js/ 
--host ec2-user.us-west-2.compute.amazonaws.com 
--auth-db admin 
{"USERNAME", user},
{"PASSWORD", password}

2020-02-11 21:46:50,432: Successfully authenticated to database: admin
2020-02-11 21:46:50,432: Successfully connected to instance ec2-user.us-west-2.compute.amazonaws.com:27017
2020-02-11 21:46:50,432: Retrieving indexes from server...
2020-02-11 21:46:50,440: Completed writing index metadata to local folder: /home/ec2-user/index.js/

インデックスのエクスポートが成功したら、次のステップでは、Amazon DocumentDB クラスターでそれらのインデックスを復元します。

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

前のステップでターゲットクラスターにエクスポートしたインデックスを復元するには、Amazon DocumentDB インデックスツールを使用します。

次のコードは、EC2 インスタンスから Amazon DocumentDB クラスターのインデックスを復元します。

python migrationtools/documentdb_index_tool.py --restore-indexes
--dir ~/index.js/ 
--host docdb-2x2x-02-02-19-07-xx.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
--tls --tls-ca-file ~/rds-ca-2019-root.pem 
{"USERNAME", user}, 
{"PASSWORD", password}

2020-02-11 21:51:23,245: Successfully authenticated to database: admin
2020-02-11 21:51:23,245: Successfully connected to instance docdb-2x2x-02-02-19-07-xx.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
2020-02-11 21:51:23,264: zips-db.zips: added index: _id

インデックスが正しく復元されたことを確認するには、mongo シェルを使用して Amazon DocumentDB クラスターに接続し、特定のコレクションのインデックスをリスト化します。次のコードをご覧ください。

mongo --ssl 
--host docdb-2020.cluster-xxxxxxxx.us-west-2.docdb.amazonaws.com:27017
--sslCAFile rds-ca-2019-root.pem --username documentdb --password documentdb
db.zips.getIndexes()

ステップ 4:AWS DMS でフルロードを実行して、データのレプリケート

AWS DMS は、データベースを AWS サービスに効率的にかつ安全に移行するのに役立つマネージドサービスです。AWS DMS は、全データロードと Change Data Capture (CDC) の 2 つの方法でデータベース移行を行います。オンライン移行のアプローチでは、AWS DMS を使用して全データコピーを実行し、次に CDC を使用して Amazon DocumentDB への変更をレプリケートします。AWS DMS の詳細については、「AWS Database Migration Service のステップバイステップチュートリアル」をご参照ください。

オンライン移行を実行するには、次の手順を実行します。

  1. AWS DMS レプリケーションインスタンスを作成します。手順については「AWS DMS レプリケーションインスタンスを使用する」をご参照ください。
    データ移行の場合、この投稿では dms.t2.medium インスタンスタイプを使用しています。AWS DMS はレプリケーションインスタンスを使用して、MongoDB ソースから Amazon DocumentDB ターゲットクラスターにデータを移行するタスクを実行します。
    さらに、AWS DMS では、特定のインスタンスタイプと移行ターゲットに対して、最大 6 か月間無料のレプリケーションインスタンスを提供します。詳細については、「AWS Database Migration Service: Free DMS」をご参照ください。
  1. MongoDB ソースと Amazon DocumentDB ターゲットエンドポイントを作成します。詳細については「AWS DMS エンドポイントの使用」をご参照ください。
    次のスクリーンショットは、MongoDB クラスターとターゲットの Amazon DocumentDB クラスターに対するこの投稿のエンドポイントを示しています。
  1. ソースとターゲットのエンドポイント間でデータを移行するためのレプリケーションタスクを作成する。
    1. タスクタイプ Full data load followed by ongoing data replication を選択する。
    2. [Start task on create] を有効にする。
      タスクの作成直後にレプリケーションが開始されます。次のスクリーンショットは、全ロード完了後にレプリケーションを実行中のデータベース移行タスクのステータスを示しています。
      タスク mongodbtodocumentdb-online-fullandongoing を選択すると、より具体的な詳細を確認できます。Table statistics セクションでは、タスクが全データロードの統計結果とソースデータベースとターゲットデータベース間のレプリケーションの実行が表示されます。そのスクリーンショットを次に示します。
      各ドキュメントの数が一致することを確認するには、ソースデータベースとターゲットデータベースで db.collection.count() コマンド を実行します。
      移行のステータスをAmazon CloudWatch メトリクスで監視し、進行状況を示すダッシュボードを作成することもできます。次の画面は、ソースデータベースからの着信 CDC の変更の割合を示しています。

ステップ 5:アプリケーションのエンドポイント を Amazon DocumentDB クラスターに変更

全ロードが完了し、CDC プロセスが継続的にレプリケートしたら、アプリケーションのデータベース接続文字列を変更して、Amazon DocumentDB クラスターを使用できるようにします。詳細については、「Amazon DocumentDB エンドポイントについて」と「Amazon DocumentDB のベストプラクティス」をご参照ください。

まとめ

この投稿では、オンラインの方法を使用した MongoDB から Amazon DocumentDB にデータを移行する方法を説明しました。詳細については「オフラインの方法を使用して、MongoDB から Amazon DocumentDB に移行する」と「Amazon DocumentDB (MongoDB 互換) でのランプアップ」をご参照ください。

ご質問やご意見はコメント欄にお寄せください。

 


著者について

 

Vijay Injamは、アマゾン ウェブ サービスの NoSQL データアーキテクトです。

 

 

 

 

Jeff Duffy は、アマゾン ウェブ サービスのシニア NoSQL スペシャリストソリューションアーキテクトです。

 

 

 

 

Joseph Idziorek は、アマゾン ウェブ サービスのプリンシパルプロダクトマネージャーです。