AWS DMS (Database Migration Service) で
- DocumentDB -> DocumentDB
- MongoDB -> DocumentDB
の2パターンでデータ移行を試してみた。
結論から書くと、1のパターンではCDC(継続的な変更のレプリケート)では動かなかったが、それ以外では動く。
AWSの公式ドキュメントを見ると、移行元としてMongoDBは記述されているがDocumentDBの記述は見つからない。しかし、DocumentDBはMongoDBの互換だから、ある程度は同じように動くようだ。
2020/08/31 追記
当初「AWS DMSはMongoDBからのデータ移行はできてもDocumentDBからはできない」というタイトルだったが、CDCを避ければDocumentDBを移行元としても実行できることがわかったので、記事の内容を訂正した。
手順
簡単に設定手順を書いておく。
前提
- 移行元と移行先は構築済み
- 移行元と移行先の両方と通信できるAWSのVPCがある
- 通信できるというのは、セキュリティグループの適切な設定を含む
- 以下手順のDMSレプリカインスタンスはこのVPC内に構築
手順
- DMSレプリカインスタンス構築 (データ移行元と移行先に接続可能なセキュリティグループの設定が必要)
- DMSレプリカインスタンスからデータ移行元に接続するためのソースエンドポイント設定
- DMSレプリカインスタンスからデータ移行先に接続するためのターゲットエンドポイント設定 (AWSのドキュメントに従い、DocumentDB接続用の証明書をダウンロードして、エンドポイントに設定が必要)
- DMSマイグレーションタスク作成 (タスク作成時にレプリカインスタンス、ソースエンドポイント、ターゲットエンドポイントを指定)
AWSのドキュメントに詳細が書いてある。
Walkthrough: Migrating from MongoDB to Amazon DocumentDB - AWS Database Migration Service
移行元にDocumentDBを指定した場合
ソースエンドポイントのエンジンとしてMongoDBを指定して、DocumentDBの接続情報を設定すればDocumentDBを移行元として使える。
ただし、マイグレーションタスク作成時に「既存のデータを移行して、継続的な変更をレプリケートする(CDC)」を選択すると、マイグレーション実行時にエラーが発生する。
エラーの内容は次のとおり。
Last failure message
Last Error Endpoint initialization failed. Task error notification received from subtask 0, thread 0 [reptask/replicationtask.c:2814] [1020401] Error executing command; Stream component failed at subtask 0, component st_0_3OQBMWWPDQOCVQ36IETQPRLPTPU2BUTTYOYJBJY ; Stream component 'st_0_3OQBMWWPDQOCVQ36IETQPRLPTPU2BUTTYOYJBJY' terminated [reptask/replicationtask.c:2821] [1020401] Stop Reason FATAL_ERROR Error Level FATAL