[アップデート] Amazon DocumentDB が 3.6 / 4.0 から 8.0 への直接メジャーバージョンアップグレードに対応しました
いわさです。
Amazon DocumentDB にはインプレースメジャーバージョンアップグレード(MVU)という機能があります。
新しいクラスターを作り直すことなく、既存クラスターのエンドポイントやストレージを維持したままエンジンバージョンを上げられます。
以前、5.0 から 8.0 へのインプレース MVU がサポートされたときに紹介しました。
このときは 5.0 からの MVU だけが 8.0 に対応していて、3.6 や 4.0 のクラスターを 8.0 に上げたい場合は、いったん 5.0 へ MVU してから 8.0 へ MVU する、という 2 段階のアップグレードが必要でした。
先日のアップデートで、3.6 と 4.0 から 8.0 への直接インプレース MVU がサポートされました。
中間バージョンを経由せず、3.6 / 4.0 のクラスターを一発で 8.0 まで上げられます。
今回こちらを確認してみたので紹介します。
実際に確認してみる
まず、対象バージョンから 8.0 が直接選べるようになっているかを CLI で確認してみます。
describe-db-engine-versions で、3.6.0 と 4.0.0 のアップグレード先(ValidUpgradeTarget)を見てみます。
$ aws docdb describe-db-engine-versions --engine docdb --engine-version 4.0.0 \
--query 'DBEngineVersions[0].ValidUpgradeTarget[].[EngineVersion,IsMajorVersionUpgrade]' --output text
5.0.0 True
5.0.1 True
8.0.0 True
8.0.1 True
$ aws docdb describe-db-engine-versions --engine docdb --engine-version 3.6.0 \
--query 'DBEngineVersions[0].ValidUpgradeTarget[].[EngineVersion,IsMajorVersionUpgrade]' --output text
5.0.0 True
5.0.1 True
8.0.0 True
8.0.1 True
3.6.0 と 4.0.0 のどちらからも、8.0.0 と 8.0.1 が IsMajorVersionUpgrade=True のアップグレード先として並んでいますね。
以前は 5.0 系だけが並んでいたんですが、8.0 系もいけるようになっていました。
また、公式ドキュメントのアップグレードパス一覧でも、3.6 / 4.0 から 8.0 への直接パスが明記されていました。
You can upgrade from Amazon DocumentDB 3.6 or 4.0 directly to 8.0 in a single MVU. Upgrading in stages through 5.0 (first to a 5.0 minor version, then to an 8.0 minor version) is also supported.
コンソールから 3.6 のクラスターを 8.0 に上げてみる
では実際にアップグレードしてみましょう。
検証用に DocumentDB 3.6.0 のインスタンスベースクラスターを用意しました。
クラスターを選択して「アクション」から「変更」を開き、エンジンバージョンのドロップダウンを見てみます。

3.6.0 のクラスターですが、アップグレード先として 8.0.0 と 8.0.1 が選べるようになっていますね。

CLI から 4.0 のクラスターも上げてみる
コンソールと並行して、4.0.0 のクラスターを CLI から 8.0.1 に上げてみます。
modify-db-cluster でエンジンバージョンを指定します。
$ aws docdb modify-db-cluster \
--db-cluster-identifier docdb-mvu-test \
--engine-version 8.0.1 \
--apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version.
メジャーバージョンアップグレードのときは --allow-major-version-upgrade が必要でした。
フラグを付けて再実行します。
$ aws docdb modify-db-cluster \
--db-cluster-identifier docdb-mvu-test \
--engine-version 8.0.1 \
--allow-major-version-upgrade \
--apply-immediately \
--query 'DBCluster.[DBClusterIdentifier,EngineVersion,Status]' --output text
docdb-mvu-test 4.0.0 available
こちらもアップグレードが始まりました。
今回の検証環境(db.t3.medium、データ少量)では、3.6 からも 4.0 からも 10 分強でアップグレードが完了しました。
5.0 経由の 2 段階ではなく一発で 8.0 まで上がるので、以前のように 5.0 への MVU が終わるのを待ってから 8.0 への MVU をかける、という待ち時間はなくなりますね。
アップグレードが完了すると、両方のクラスターともエンジンバージョンが 8.0.1、パラメータグループが default.docdb8.0 になっていました。
$ aws docdb describe-db-clusters \
--query 'DBClusters[].[DBClusterIdentifier,EngineVersion,Status,DBClusterParameterGroup]' --output text
docdb-mvu-test 8.0.1 available default.docdb8.0
hoge0902docdb 8.0.1 available default.docdb8.0
3.6 / 4.0 からアップグレードするときに気をつけること
5.0 から 8.0 に上げるときと違って、3.6 / 4.0 から上げる場合は追加で意識しておきたい点があります。
ここは私が検証で確認したわけではなく、公式ドキュメントに記載されている考慮点です。
いちばん押さえておきたいのがインデックスの再構築です。
MVU では元のインデックスがそのまま引き継がれますが、5.0 以降はインデックスのメンテナンスやガベージコレクションが改善されています。
公式ドキュメントでは、3.6 / 4.0 からアップグレードした場合は、最適なクエリ性能を得るためにアップグレード後に reIndex でインデックスを再構築することが推奨されています(任意、追加の I/O が発生します)。
After upgrading from 3.6 or 4.0 (to either 5.0 or 8.0), rebuild your indexes to ensure optimal query performance (optional, involves additional I/O).
5.0 から 8.0 へのアップグレードではインデックスの再構築は不要だったので、ここは 3.6 / 4.0 からのアップグレード特有の考慮点ですね。
もうひとつ、3.6 から上げた場合はサブドキュメント内の数値比較の挙動が 3.6 のまま引き継がれるとのことです。
たとえば {a: {b: NumberLong(1)}} と {a: {b: 1}} は、4.0 以降では等しいと判定されますが、3.6 では型をまたいで比較されず等しくならない、という挙動です。
3.6 から上げたクラスターはこの 3.6 の挙動を継承するようです。
このほか、8.0 は TLS 1.2 以上が必須で、TLS 1.0 / 1.1 は使えなくなっています。
また、T系のバースト可能インスタンス(db.t3 / db.t4g)を使っている場合は、アップグレード前にプライマリを db.r5.large / db.r6g.large 以上にスケールアップしておくことが推奨されています。
バーストインスタンスだと CPU やメモリが足りずアップグレードに失敗することがあるためで、アップグレード完了後は元のインスタンスクラスに戻せます。
今回はデータもインデックスもごく少量だったので db.t3.medium のままいけましたが、実データを持つクラスターで試すときはこのあたりを事前に確認しておくとよさそうです。
さいごに
本日は Amazon DocumentDB で 3.6 / 4.0 から 8.0 への直接インプレース MVU がサポートされたので確認してみました。
これまで 3.6 / 4.0 のクラスターを 8.0 に上げるには 5.0 を経由する 2 段階のアップグレードが必要でしたが、今回のアップデートで一発で 8.0 まで上げられるようになりました。
アップグレードの操作自体は 5.0 からの MVU と変わらず、コンソールでエンジンバージョンを選ぶだけ、CLI なら --allow-major-version-upgrade を付けて modify-db-cluster するだけです。
古いバージョンを使い続けているクラスターほど、経由するアップグレードのステップが減ることになります。
一方で 3.6 / 4.0 からの場合はインデックス再構築や 3.6 の数値比較の挙動継承など、5.0 からのときにはなかった考慮点もあります。
このあたりはドキュメントにも目を通したうえで、アップグレード後の動作確認をしっかりやっておきましょう。







