はじめに
Aurora Global Database は低レイテンシーなグローバル読み取りに有効なソリューションです。
しかしマイナーバージョンアップを行う際、特有の作法を知らないとトラブルに直面します。
実際に Terraform からプライマリクラスターのマイナーバージョンを更新したところ、15 分以上「Modifying」のまま処理が完了しない事象が発生しました。
本記事ではこの事象の原因を特定し、解決策が有効であるかコンソールと CLI を用いて検証した内容を解説します。
前提条件
今回の検証環境は、以下の構成で構築しています。
- Global Database 名: yoshimura-global-db
- プライマリクラスター (ap-northeast-1) : yoshimura-primary-db-cluster
- ライターインスタンス: yoshimura-primary-db-instance-1
- セカンダリクラスター (ap-northeast-3) : yoshimura-secondary-db-cluster
- インスタンス: なし(ヘッドレス構成)
- エンジン: Aurora PostgreSQL 15.8
- 設定: 自動マイナーバージョンアップデートは無効

結論:アップグレード順序の誤り
公式ドキュメントには、マイナーバージョンアップグレードについて以下の制約が明記されています。
- Aurora Global Database をマイナーアップグレードするときは、プライマリクラスターをアップグレードする前に、すべてのセカンダリクラスターをアップグレードします。
- マイナーアップグレードを実行するには、セカンダリクラスターは少なくとも 1 つの DB インスタンスを持っている必要があります。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-upgrade.html#aurora-global-database-upgrade.minor
今回の事象は、先にプライマリクラスターに対してアップデートを実行していたことが大きな要因です。
また、セカンダリクラスターを更新するには、ヘッドレス構成のままでは制約によりアップグレードできないことも判明しました。
解決策
ヘッドレス構成を維持したままではアップグレードができないため、一時的にセカンダリに対してDBインスタンスを追加します。
その上で、「セカンダリ → プライマリ」の順番でアップグレードを進めます。
エラーを再現してみる
まずは失敗するパターンを確認するため、プライマリクラスターのみの更新を試みます。
コンソールから、エンジンバージョンを 15.12 に変更して適用してみたところ、以下のエラーメッセージが出ました。
やはり、セカンダリクラスターを先にアップグレードする必要があるようです。
Cannot upgrade DB cluster ‘yoshimura-primary-db-cluster’ to engine version 15.12 as global replica(s) are running lower version. Please upgrade global replicas first before upgrading the primary member.
DBクラスタ ‘yoshimura-primary-db-cluster’ をエンジンバージョン 15.12 にアップグレードできません。グローバルレプリカがより低いバージョンで実行中です。プライマリメンバーをアップグレードする前に、まずグローバルレプリカをアップグレードしてください。

正しいアップグレード手順
1. セカンダリクラスターにDBインスタンスを作成
ではセカンダリクラスターをマイナーバージョンアップグレードします。
アップグレードの前提条件を満たすため、セカンダリクラスターにDBインスタンスを追加します。
現在、ヘッドレス構成のクラスターに対してマネジメントコンソールからインスタンスを追加する操作はサポートされていないようなので、AWS CLI コマンドを使用してDBインスタンスを作成します。
aws rds create-db-instance \ --db-instance-identifier yoshimura-secondary-db-instance-1 \ --db-cluster-identifier yoshimura-secondary-db-cluster \ --db-instance-class db.r5.large \ --engine aurora-postgresql \ --region ap-northeast-3
コマンド実行後、セカンダリ側に yoshimura-secondary-db-instance-1 が作成されたことが確認できました。

2. セカンダリクラスターのマイナーアップグレードを実施
前提条件が整ったので、セカンダリクラスターから先にアップグレードを行います。
コンソールでバージョン 15.12 を選択して更新を実行しました。

数分待機すると、セカンダリクラスターのステータスが「利用可能」になり、正常に更新されたことが確認できました。
(プライマリクラスターとセカンダリクラスターのメジャーおよびマイナーエンジンバージョンが一致していない場合、フェイルオーバーができないので注意してください)

3. プライマリクラスターのマイナーアップグレード実施
セカンダリの更新完了を受けて、改めてプライマリクラスターのアップグレードを実施します。

4. 全クラスターのバージョン更新確認
最後に、Global Database 全体の状態をチェックします。
プライマリクラスターおよびセカンダリクラスターのアップグレードが完了し、グローバルデータベースのバージョンも更新されていることが確認できました。
(セカンダリDBインスタンスの削除をお忘れなく)

おわりに
Aurora Global Database のマイナーアップグレードは、セカンダリから順に行うのが鉄則です。
ヘッドレス構成の場合は「インスタンスの追加」というひと手間が必要になる点を忘れないようにしましょう。
参考ドキュメント
Aurora Global Database のマイナーバージョンアップグレード
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-upgrade.html#aurora-global-database-upgrade.minor
Amazon Aurora PostgreSQL の更新
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.html