はじめに
Amazon Aurora MySQLグローバルデータベースを運用している際、マイナーバージョンのアップグレードが必要になることがあります。
公式ドキュメントには「セカンダリリージョンをアップグレードした後、プライマリリージョンをアップグレードできる」と記載されており、一見シンプルな手順に思えます。
しかし、実際にアップグレードを試みたところ、予期しないエラーが発生しました。ドキュメントを詳しく確認したところ、MySQLの場合はPostgreSQLとは異なる手順が必要であることが判明しました。
この仕様の違いは見落としやすく、同じような課題に直面する方もいるのではないかと考え、
本記事では実際の画面キャプチャを交えながら、Aurora MySQLグローバルデータベースのマイナーバージョンアップグレード手順を詳しく解説します。
前提条件
今回は、以下環境に対してマイナーバージョンアップグレードを実施します。
- グローバルデータベース名:upgrade-test-global
- プライマリリージョンクラスター(東京):upgrade-test-tokyo
- セカンダリリージョンクラスター(大阪):upgrade-test-osaka
- エンジンタイプ:Aurora(MySQL Compatible)
- エンジンバージョン:8.0.mysql_aurora.3.08.2
- アップグレード先のエンジンバージョン:8.0.mysql_aurora.3.10.0
なお、本手順にはバックアップの取得、ロールバック手順、所要時間、ダウンタイム等について記載しておりません。
これらの項目を検証環境等で事前に検証してから、本番環境での作業を実施するようにしてください。
予期しないエラー
ドキュメントにあるようにセカンダリリージョンからアップグレードしてみると以下のエラーが発生しました。
In-place minor version upgrade of Aurora MySQL global database cluster 'upgrade-test-osaka' to Aurora MySQL engine version 8.0.mysql_aurora.3.10.0 isn't supported. The selected target version 8.0.mysql_aurora.3.10.0 supports a higher version of community MySQL that introduces changes incompatible with previous minor versions of Aurora MySQL. See the Aurora documentation for how to perform a minor version upgrade on global database clusters.

アップグレード手順はドキュメント参照と書かれており、おかしいなと思いつつプライマリリージョンも試しにアップグレードしてみました。
その際のエラーは以下のようになり、プライマリではなくレプリカからアップグレードしてくださいと書いてありますね。
Cannot upgrade DB cluster 'upgrade-test-tokyo' to engine version 8.0.mysql_aurora.3.10.0 as global replica(s) are running lower version. Please upgrade global replicas first before upgrading the primary member.

そこでAWSドキュメントを見てみると以下のような別ドキュメントを参照するような記載がありました。
Aurora Global Database をマイナーアップグレードするときは、プライマリクラスターをアップグレードする前に、すべてのセカンダリクラスターをアップグレードします。 Aurora PostgreSQL グローバルデータベースを上位のマイナーバージョンにアップグレードする方法については、「マイナーバージョンのアップグレードとパッチの適用方法」を参照してください。Aurora MySQL グローバルデータベースを上位のマイナーバージョンにアップグレードする方法については、「エンジンのバージョンを変更して Aurora MySQL アップグレードする」を参照してください。
AWSドキュメント「エンジンのバージョンを変更して Aurora MySQL アップグレードする」を見てみると以下記載がありました。
どうやらアップグレード先のAurora MySQLバージョンが「3.04.*」以上だと、グローバルデータベースからすべてのセカンダリリージョンを削除しないといけないようです。
Aurora Global Database でマイナーアップグレードを実行する場合は、プライマリクラスターをアップグレードする前に、すべてのセカンダリクラスターをアップグレードします。 Aurora MySQL バージョン 3.04.* 以上またはバージョン 2.12.* へのマイナーバージョンアップグレードを実行するには、次のプロセスを使用します。 グローバルクラスターからすべてのセカンダリリージョンを削除します。「Amazon Aurora Global Database からのクラスターの削除」のステップを実行してください。 必要に応じて、プライマリリージョンのエンジンバージョンをバージョン 3.04.* 以上、またはバージョン 2.12.* にアップグレードします。「To modify the engine version of a DB cluster」のステップを実行してください。 グローバルクラスターにセカンダリリージョンを追加します。「AWS リージョン の Amazon Aurora Global Database への追加」のステップを実行してください。
アップグレードの流れ
アップグレードする流れを簡単にまとめると以下になります。
- グローバルデータベースからセカンダリリージョンを削除
- セカンダリリージョンクラスターを削除
- アップグレード手順として、セカンダリリージョンクラスターを削除します。なお、削除後に同じ「upgrade-test-osaka」という名前でクラスターを再作成するため、クラスターと紐づくインスタンスを削除する必要があります
- プライマリリージョンクラスターのアップグレード
- セカンダリリージョンクラスターの追加
- 削除前と同じ設定で「upgrade-test-osaka」クラスターを追加します
アップグレード手順
アップグレード手順を以下にまとめます。
なお、環境は前提条件に書いた状態に構築済みです。

グローバルデータベースからセカンダリリージョンを削除
・セカンダリリージョンクラスターを選択し、アクションから「グローバルデータベースから削除」を押下

・「削除して昇格する」ボタンを押下

・セカンダリリージョンクラスターのステータスが変化する

・少しするとグローバルデータベースからセカンダリリージョンクラスターが昇格する

セカンダリリージョンクラスターを削除
・セカンダリリージョンのインスタンスを選択し、アクションから「削除」を押下

・削除ウィンドウに「delete me」を入力し、「削除」ボタンを押下

・インスタンスの削除が完了したら、セカンダリリージョンクラスターを選択し、アクションから「削除」を押下

・削除に関するチェックボックスを選択してから、削除ウィンドウに「delete me」を入力し、「削除」ボタンを押下

プライマリリージョンクラスターをアップグレード
・プライマリリージョンクラスターを選択し、「変更」ボタンを押下

・エンジンバージョンを「8.0.mysql_aurora.3.10.0」に変更し、「クラスターの変更」を押下

・クラスターステータスが更新される

・アップグレードが完了したら、エンジンバージョンが「8.0.mysql_aurora.3.10.0」になっていることを確認する

セカンダリリージョンクラスターを追加
・グローバルデータベースを選択し、アクションから「AWSリージョンを追加」を押下

・セカンダリリージョン、DBクラスター識別子、DBインスタンス識別子を選択、入力して追加

・セカンダリリージョンクラスターが作成されるまで待機

・セカンダリリージョンクラスターの「設定」タブを見ると、プライマリリージョンクラスターと同じエンジンバージョンで起動している

まとめ
本記事では、Aurora MySQL Global Databaseのマイナーバージョンアップグレード手順についてまとめました。
ちょっとした落とし穴がありますので、アップグレードを検討している方の参考になれば幸いです。