はじめに
Amazon Aurora MySQL 2(MySQL5.7互換)が2024年10月31日にサポートが終了するので、Aurora MySQL 3(MySQL8互換)にバージョンアップしました。
手法は色々あるのですが、Amazon RDS がマネージドサービスとして提供するBlue/Greenデプロイメントが良さげでしたので手順を共有します。
手順
現状のバージョン確認
アプリケーションと同じルートからバージョンを確認します。
$ mysql -h foo-production.cluster-bar.ap-northeast-1.rds.amazonaws.com -u username -ppassword dbname
Server version: 5.7.12 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
MySQL5.7が動いていますね。
> select @@aurora_version;
+------------------+
| @@aurora_version |
+------------------+
| 2.11.5 |
+------------------+
Auroraのバージョンでいうと2でした。
パラメータグループの作成
現在の本番環境(Blue環境)から、ステージング環境(Green環境)に、論理レプリケーションするため、予めbinlog_format
をMIXED
に変更しておきます。
(AWSはROW
を推奨しているという情報もありますので公式で確認して下さい)
使用中のパラメータグループをコピー
コピーしたパラメータグループを編集
変更前と変更後を比較
メジャーバージョンアップになるので、MySQL8用のパラメータグループも準備しておかないといけません。
デフォルトのdefault.aurora-mysql8.0
を基に、カスタムで修正を加えます。
修正内容は、デフォルトのdefault.aurora-mysql5.7
と、使用中のパラメータグループを比較し、差分をMySQL8用に置き換えます。
DBインスタンスを変更
作成したパラメータグループをDBインスタンスに割り当てます。
もし、DBインスタンスクラスにdb.t3.small
を使っている場合、Aurora MySQL 3ではサポートしませんので、併せてdb.t3.medium
にアップグレードしておきます。
DBインスタンスを再起動
変更したら、再起動して反映します。
再起動を忘れて次に進むと、デプロイで次のエラーになりますよ!
Blue Green Deployments requires writer instance to be in-sync with cluster parameter group.
ブルー/グリーンデプロイの作成
本番環境を基に、Aurora MySQL 3 のステージング環境(Green環境)を作ります。
対象のDB識別子を選択し、アクションメニューから「ブルー/グリーンデプロイの作成」を実行します。
ステージング環境(Green環境)の設定をします。
エンジンバージョンには、Aurora MySQL 3(MySQL 8互換)を選択します。リビジョンはAWSが推奨するもので良いと思います。
パラメータグループには、先ほど作成したMySQL8用のパラメータグループを選択します。
作成中の画面になります。
複製後にバージョンアップも行うので、ここでは結構な時間がかかります。
終わったらエンドポイントを確認します。
この時点で、本番環境(Blue環境)からステージング環境(Green環境)へ、論理レプリケーションが始まっています。
Green環境のエンドポイントに接続し、バージョンを確認してみましょう。
$ mysql -h foo-production-green-xxx.cluster-bar.ap-northeast-1.rds.amazonaws.com -u username -ppassword dbname
Server version: 8.0.36 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
MySQL8で動いています。
> select @@aurora_version;
+------------------+
| @@aurora_version |
+------------------+
| 3.07.1 |
+------------------+
Auroraのバージョンでいうと3でした。
テスト
Green環境を使って、業務チームにがんがんテストしてもらいます。
切り替え(スイッチオーバー)
ステージング環境(Green環境)を、新しい本番環境にプロモート(昇格)させます。
ロール「ブルー/グリーンデプロイ」のDB識別子を選択し、アクションメニューから「切り替え」を実行します。
切り替えを指示すると、AWSは準備が整っているかチェックし、Blue/Green双方の書き込みをブロックしてデータ損失を防ぎます。
切り替えにかかる時間は1分程度ですが、この間、アプリがエラーを返すことがあるので、サービスの計画停止時間内に実施します。
CloudWatchがアラームを出すかもしれません。運用監視チームへの一報も忘れずに。
切り替えのタイムアウト(デフォルトは5分)より長くかかる場合、変更はすべてロールバックされ、どちらの環境にも変更は加えられません。
切り替え後、新しい本番環境に接続します。
エンドポイントは元の本番環境と同じです。
$ mysql -h foo-production.cluster-bar.ap-northeast-1.rds.amazonaws.com -u username -ppassword dbname
> select @@aurora_version;
+------------------+
| @@aurora_version |
+------------------+
| 3.07.1 |
+------------------+
アプリでも動作確認し、問題なければ古いBlue環境を削除します。