こんにちは、尾谷です。
前回投稿した RDS の記事 が好評なので RDS 関連のブログをもう一本書いてみました。
内容は、RDS の 8.0.19 を利用していて 8.0.29 にスケジューリング・アップグレードしたところ、表題のメッセージが出て行き詰まった事故的エピソードとなります。
事故状況
RDS のマイナーバージョンのアップグレード作業を行なっていて、ステージング環境のアップグレード★ で事象に直面しました。
- 開発環境の RDS: 8.0.19 → 8.0.29
- ステージング環境の RDS: 8.0.19 → 8.0.29 ★
- 本番環境の RDS: 8.0.19
経緯
7 月上旬に「開発環境」で稼働する RDS のエンジンバージョンを 8.0.19 から 8.0.29 にアップグレードしました。
バージョンは当時の最新版で、AWS から 2022 年 6 月にリリースされた記事を参考に 8.0.29 を採用しました。
動作検証を行いましたが、アプリケーションの挙動に問題はありませんでした。
ステージング環境は職員の方々が利用されるため、午前 7 時にメンテナンスウインドウを設定して自動アップグレードするように設定することになりました。
アップグレード実施
一通り確認が終ったため、7/21 に ステージング環境の RDS インスタンスもアップグレードする調整を行いました。
前日の 7/20 にメンテナンスウインドウを翌日の午前 7 時 (JST) に変更し、 DB エンジンバージョンを 8.0.29 にアップグレードされるようスケジューリングを行いました。
翌日、RDS コンソールより状況を確認したところ、8.0.29 は非推奨になったと表示されていました。
急いで開発環境の RDS を確認すると同じく警告表示されていました。
そして、本番環境にて 8.0.28 までしか選択できない状態になっているのを確認しました。
バージョンダウン
RDS はバージョンアップ、アップグレードが可能で、バージョンダウン、ダウングレードはスナップショットからの復元という理解でした。
「該当する最新のマイナーバージョンにアップグレードすることをお勧めします。」と記載があることから、ダメ元でバージョンの変更を試みましたが、やはりリリースされている最も大きいバージョンである 8.0.29 以外が選択できない状態になっていました。
綿密に社内調整、検証、お客様調整を行って、作業当日に陥った事象で自分の不幸を呪いましたが、AWS サポートに問い合わせすることにしました。
裏づけ検証
AWS サポートに問い合わせる前に、根拠と裏付けを行うことにしました。
以下、公式ドキュメントに従って describe-db-engine-versions にて、DB エンジンバージョンのアップグレードなど、メンテナンス更新が DB インスタンスで利用可能かどうかを確認しました。
DB インスタンスのエンジンバージョンのアップグレード - Amazon Relational Database Service
CloudShell にて以下を投入すると、
aws rds describe-db-engine-versions \ --engine mysql \ --engine-version 8.0 \ --region ap-northeast-1 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output text
以下の戻り値がありました。8.0.29 の文字列は見つけることができませんでした。
東京リーション (ap-northeast-1) 以外にも、バージニア北部リージョン (us-east-1) や、大阪リージョン (ap-northeast-3) を確認しましたが、8.0.28 が最新でした。
[cloudshell-user@ip-10-0-74-89 ~]$ aws rds describe-db-engine-versions \ > --engine mysql \ > --engine-version 8.0 \ > --region ap-northeast-1 \ > --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ > --output text False 8.0.15 False 8.0.16 False 8.0.17 (中略) False 8.0.26 False 8.0.27 False 8.0.28 False 8.0.27 False 8.0.28 False 8.0.28
以上より、RDS コンソールの不具合の可能性は低く、AWS にて 8.0.29 の配信をストップしたもののメンテナンスウインドウでスケジューリングされたためアップグレードされてしまった可能性を疑いました。
今後再度利用可能になる予定は現在のところない
AWS サポートに問い合わせたところ、以下のような内容の回答をいただきました。
- RDS for MySQL 8.0.29 は、InnoDB ストレージエンジンに関する問題が確認されていること
- INSTANT アルゴリズムを用いたカラムの追加や削除を行うと、データベースプロセスがクラッシュする問題があること。
- 8.0.29 バージョンのインスタンス新規作成と、8.0.29 へのアップグレードができない状態にあること。
- 新しいバージョンのリリースは予定しているが、現時点では未定になっていること。
以上より、同じ境遇になられた方はカラムの追加処理を控えるか、スナップショットから前のバージョンに戻すか、DMS を使うなどしてデータベースを移行する必要がありそうです。
7/31 以降は、8.0.21 以前のバージョンが起動できなくなる。と記載されていたため、上記 RDS は 7 月中にスナップショットから 8.0.19 に戻して、8.0.28 にアップして対応完了しました。
以上、事故エピソードのご紹介でした。
アップグレードをスケジューリングしたために偶然発生した事故でしたが、不幸中の幸いだったのは、本番環境には影響がなかったところでした。
公式ドキュメントと AWS サポートの支援があり無事乗り切ることができました。
ありがとうございました。