[AWS] MongoDB からの移行ツール:DocumentDB Index Tool を試してみた

こんにちは、菊池です。

先日の AWS Black Belt Online Seminarでは、Amazon DocumentDBが紹介されました。

その中で紹介されていたツール、DocumentDB Index Toolが気になったので試してみました。

DocumentDB Index Tool

紹介によると、MongoDBのIndexのエクスポートとDocumentDBとの互換性チェック、インポートが可能なようで、GitHubにて公開されています。

インストール

早速試してみます。実行した環境は、Amazon Linux 2で、ターゲットのMongoDBは以下の記事で用意した MongoDB 4.2RCです。

MongoDB 最新バージョン 4.2 RC版を Amazon Linux 2 にインストールする

まずは、前提となる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双方の進化に合わせてアップデートされていくことを期待します。