この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
先日の AWS Black Belt Online Seminarでは、Amazon DocumentDBが紹介されました。
その中で紹介されていたツール、DocumentDB Index Toolが気になったので試してみました。
DocumentDB Index Tool
紹介によると、MongoDBのIndexのエクスポートとDocumentDBとの互換性チェック、インポートが可能なようで、GitHubにて公開されています。
インストール
早速試してみます。実行した環境は、Amazon Linux 2で、ターゲットのMongoDBは以下の記事で用意した MongoDB 4.2RCです。
まずは、前提となるpipをインストールしておきます。
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ sudo python get-pip.py
次に、リポジトリのクローンです。
$ git clone https://github.com/awslabs/amazon-documentdb-tools.git
必須のパッケージをインストールしたら完了です。
$ cd amazon-documentdb-tools/
$ sudo pip install -r requirements.txt
環境準備
チェック対象のMongoDBは前述の通り、MongoDB 4.2RCです。互換性チェックの結果をみたいので、DocumentDBではサポート外の以下のインデックスを作成しておきます。
Partial Index
db.user.createIndex( { "userMetadata.age" : 1 }, { partialFilterExpression: { age: { $gt: 30 } }} )
Wildcard Index
db.user.createIndex( { "userMetadata.$**" : 1 } )
実行
それでは実行してみます。まずは--dump-indexesでエクスポートします。
$ python migrationtools/documentdb_index_tool.py --dump-indexes \
> --host localhost \
> --port 27017 \
> --username skikuchi \
> --password password \
> --auth-db localhost \
> --dir ~/dump/
2019-06-30 09:28:34,858: Successfully authenticated to database: localhost
2019-06-30 09:28:34,858: Successfully connected to instance localhost:27017
2019-06-30 09:28:34,858: Retrieving indexes from server...
2019-06-30 09:28:34,863: Completed writing index metadata to local folder: /home/ec2-user/dump/
エクスポートしたファイルは以下のようになっていました。
$ ls -l ~/dump/localhost/
合計 4
-rw-rw-r-- 1 ec2-user ec2-user 311 6月 30 09:28 user.metadata.json
それでは、互換性のチェックです。--show-issuesを実行します。なぜか、username/password/auth-dbを指定しないと実行できませんでした。
$ python migrationtools/documentdb_index_tool.py --show-issues \
> --username skikuchi \
> --password password \
> --auth-db localhost \
> --dir ~/dump/
2019-06-30 09:29:21,191: {
"localhost": {
"user": {
"userMetadata.age_1": {
"unsupported_index_options": [
"partialFilterExpression"
]
}
}
}
}
結果、Partial Indexがissueとして表示されました。正式リリース前の4.2の機能であるWildcard Indexはさすがに評価対象外のようです。ちなみに、互換性に問題がない場合は、以下のように表示されました。
$ python migrationtools/documentdb_index_tool.py --show-issues \
> --username skikuchi \
> --password password \
> --auth-db localhost \
> --dir ~/dump/
2019-06-30 09:21:46,534: No incompatibilities found.
さいごに
MongoDBからDocumentDBへの移行互換性チェックツール、DocumentDB Index Toolを試しました。今後も、MongoDB、DocumentDB双方の進化に合わせてアップデートされていくことを期待します。