Amazon Aurora MySQL で Blue/Green Deployments を使ったマイナーバージョンアップグレードの手順
2023.3.31
はじめに
最近、Aurora MySQL や RDS for MySQL でマイナーバージョンのアップグレードが AWS からお知らせで来ているかと思います。
しかし、マイナーバージョンとはいえ、アップグレード中はダウンタイムが発生します。
また、アップグレードに伴う作業はかなり大変だと思います。
そこで、Blue/Green Deployments 機能を使えばこのダウンタイムを最小限にしつつ作業を自動化することが可能です。
本記事では、この Blue/Green Deployments 機能を使ってどうやってマイナーバージョンするのかと、 切り戻し手順について記述します。
注意事項
- 現時点(2023 年 3 月 13 日)では、Blue/Green Deployments 機能 は Aurora MySQL でのみサポートされています
- 現時点(2023 年 3 月 13 日)では、ソースデータベースで新規起動できないマイナーバージョンを選択している場合はBlue/Green Deployments 機能を利用することができないです
- 以下、機能を Aurora クラスターで利用している場合、Blue/Green Deployments 機能が利用できないです
- Amazon RDS Proxy
- クロスリージョン リードレプリカ
- Aurora サーバーレス v1 DB クラスター
- Aurora グローバル データベースの一部である DB クラスター
- AWS CloudFormation
その他の制限事項については以下ドキュメントをご覧下さい。
Overview of Amazon RDS Blue/Green Deployments for Aurora – Amazon Aurora
Blue/Green Deployments について
本番環境の Blue 環境と、同期されたステージング環境の Green 環境を構築し、ステージング環境で様々な変更を実施して任意のタイミングで環境の切り替えをすることができる機能です。
Blue/Green デプロイメントは、本番データベース環境を別の同期されたステージング環境にコピーします。
Amazon RDS Blue/Green デプロイを使用すると、本番環境に影響を与えることなく、ステージング環境でデータベースに変更を加えることができます。
たとえば、DB エンジンのメジャーまたはマイナー バージョンをアップグレードしたり、データベース パラメータを変更したり、ステージング環境でスキーマを変更したりできます。
準備ができたら、ステージング環境を新しい実稼働データベース環境に昇格できます。ダウンタイムは通常 1 分未満です。
データベースの更新に Amazon RDS Blue/Green デプロイを使用する – Amazon Aurora
メリット
- 簡単に環境構築ができる
- ダウンタイムが少ない(約 1 分程度)
今まで、これと同じ環境を構築しようとすると、レプリケーションの設定や切替のタイミングなど作業難易度が高く時間もかかりました。
それが、Blue/Green Deployments 機能を使うことにより AWS 側ですべてマネージドにしてくれるようになります。
データベースの更新に Amazon RDS Blue/Green デプロイを使用する – Amazon Aurora
新機能 – Amazon Aurora と Amazon RDS でのフルマネージド型 Blue/Green Deployments | Amazon Web Services ブログ
RDS Blue/Green Deployments による DB 入れ替えのダウンタイム最小化
マイナーバージョンのアップグレード手順
今回バージョンアップグレードを行う環境は以下の通りです。
- アップグレード前のエンジンバージョン:5.7.mysql_aurora.2.07.1
- アップグレード後のエンジンバージョン:5.7.mysql_aurora.2.11.1
現状選べるバージョンが少ないため利用できる最古のバージョンと最新のバージョンでアップグレードを行います。
今回は、アップグレード手順がメインなので事前に以下リソースを作成しております。
- EC2:Aurora 接続確認用インスタンス
- Aurora:エンジンバージョン:5.7.mysql_aurora.2.07.1
- パラメータグループ:family “aurora-mysql5.7”
- binlog_format:ROW
Aurora DB クラスターを準備する際の binlog_format については以下をご覧下さい。
Blue/Green デプロイの作成 – Amazon Aurora
更に、レプリケーションする際に既存インスタンスにデータがないとうまくいかないので、MySQL のサンプルデータベースをインポートしてます。
MySQL :: Other MySQL Documentation
0. 手順の概要
以下手順に沿ってアップグレードを行います。
- Blue/Green Deployments 環境構築:Green 環境を作成します
- DB エンジンのバージョンアップ:Green 環境を作成後自動的にアップグレードされます
- Blue/Green Deployments 切り替え:Blue 環境と Green 環境を切り替えます
- Blue/Green Deployments 環境削除:不要になった Blue 環境を削除します
- おまけ 環境切り戻し:切り替えた環境を Green 環境から Blue 環境に戻します
基本に、Blue/Green Deployments 機能が自動的に行ってくれるのでコンソールでポチポチして待機になります。
待機する時間が作業時間の多くを占めてます。
1. Blue/Green Deployments 環境構築
では、アップグレード対象の Aurora クラスターを選択して「Blue/Green Deployments」で環境を作成していきます。
各設定については既存と同じよう値になるように設定します。
エンジンバージョンは最新のものを指定しています。
設定する項目はこれだけで後は待機します。
インスタンスを起動する時間+アップグレードの時間があるのでそこそこ待ちます。
ちなみに、Green 環境は数分で立ち上がり、データ量によって変わりますが 30 分程度で利用可能となります。
10 分程度待っても Green 環境が立ち上がらない場合は何かしらの問題が発生しているため環境削除したほうが良いと思います。
(Blue 環境が起動できないマイナーバージョンを使っててこの事象になりました)
Green 環境が立ち上がってからバージョンアップが行われます。
ステータス画面から現状の作業について確認することができます。
しばらくすると、Green 環境のクラスターが立ち上がってきます。
1.1 DB エンジンのバージョンアップ
以下 Green 環境が立ち上がると自動的にバージョンアップが行われます。
イベント画面から各動作について確認することができます。
クラスターが利用可能になっていることとステータスですべて完了していることが確認できれば Green 環境の構築が完了しています。
設定から Blue 環境と Green 環境の差分について確認できます。
2. Blue/Green Deployments 切り替え
準備が整ったので切り替えを行います。
設定内容に間違いがないことを確認します。
ブルー/グリーン デプロイの切り替え – Amazon Aurora
また必要に応じてタイムアウトの設定を変更します。
設定したタイムアウトの間でスイッチオーバーできるタイミングを自動的に図ります。
切り替えがうまくいかない場合は、イベント画面からエラーについて確認することができます。
問題がなければ、各インスタンスのステータスが切り替えに変わります。
切り替えが完了するとツリー構造が解除されます。
エンドポイントは自動で切り替わるためアプリ側の操作は不要です。
元のエンドポイントにアクセスしてバージョンを確認します。
[root@ip-10-0-1-189 ~]# mysql -u root -ppassword -h coldairflow-aurora-bgdeploy.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 19 Server version: 5.7.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> select @@aurora_version; +------------------+ | @@aurora_version | +------------------+ | 2.11.1 | +------------------+ 1 row in set (0.00 sec)
アップグレードされていることが確認できました。
3. Blue/Green Deployments 環境削除
切り替え後、Blue 環境はそのまま残り続けるので不要な場合は削除をする必要があります。
手順は切り替えと同じように削除できます。
まずは、ロールが「ブルー/グリーンデプロイ」となっている枠を削除します。
Blue/Green 環境との紐づけは解除されているので枠だけになってます。
これを削除しても Blue 環境と Green 環境にはなにも影響がありません。
Blue 環境の Aurora クラスターを削除します。
ここは Aurora クラスターを削除する手順と何も変わりません。
必要に応じてスナップショットを取得します。
これで対応完了です。
おまけ 環境切り戻し
もし、Blue/Green 環境切り替え後にアプリで問題が発生した場合に Green 環境から Blue 環境に切り戻しする方法について記述します。
(本記事でいうと「Blue/Green Deployments 切り替え」が終わったフェーズを指してます)
概要としては以下手順のように実施します。
どの手順も実施する際にダウンタイムが発生しますのでご注意ください。
- Blue 環境を再起動する
- Green 環境のクラスター名を別の名前に変更する
- Blue 環境のクラスター名を元のエンドポイントと同じ名前に変更する
また、切り替えを実施する前に Green 環境のエンドポイントでアプリの動作確認をして問題が発生した場合は、切り替えを行わず環境の削除を行えばコストの追加は発生しなくなります。
1. Blue 環境を再起動する
まずは、本手順の実施が必須となっております。
理由としては、切り替えを実施する際に書き込みを禁止するため Blue 環境は Read_only になっています。
そのため、このままエンドポイントを戻しても書き込みができずエラーになります。
(切り替え後のためエンドポイントに old がついてます)
[root@ip-10-0-1-189 ~]# mysql -u root -ppassword -h coldairflow-aurora-bgdeploy-old1.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 23 Server version: 5.7.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> select @@read_only; +-------------+ | @@read_only | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec)
こちらは、ライターインスタンスを再起動することで解決します。
DB クラスターは、ライターインスタンスが再起動されるまで読み取り専用です。
ブルー/グリーン デプロイの切り替え – Amazon Aurora
2. Green 環境のクラスター名を別の名前に変更する
少しややこしいですが、切り替え後のエンドポイントは以下のようになっているとします。
- Blue 環境:切り替え前の Green 環境エンドポイント名(coldairflow-aurora-bgdeploy-old1)
- Green 環境:正規のエンドポイント名(coldairflow-aurora-bgdeploy)
それを以下のように変更します。
- Blue 環境:正規のエンドポイント名(coldairflow-aurora-bgdeploy)
- Green 環境:一時的に避難するためのエンドポイント名(coldairflow-aurora-bgdeploy-old2)
クラスターエンドポイントは、アカウントとリージョンごとに固有となっているため、重複することができません。
そのため、Blue 環境に「正規のエンドポイント名」を指定しようとすると Green 環境と競合してエラーになります。
その場合は、まず「正規のエンドポイント名」である Green 環境を別の名前に変更してやる必要があります。
その後、Blue 環境(切り戻し先)のエンドポイント名を変えます。
では、Green 環境のエンドポイント名を変更します。
3. Blue 環境のクラスター名を元のエンドポイントと同じ名前に変更する
Green 環境のインスタンスが利用可能になったことを確認してから Blue 環境を変更します。
4. バージョン確認
各エンドポイントで接続して Aurora のバージョンを確認します。
Blue 環境(coldairflow-aurora-bgdeploy)のバージョン
[root@ip-10-0-1-189 ~]# mysql -u root -ppassword -h coldairflow-aurora-bgdeploy.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> select @@aurora_version; +------------------+ | @@aurora_version | +------------------+ | 2.07.1 | +------------------+ 1 row in set (0.00 sec)
Green 環境(coldairflow-aurora-bgdeploy-old2)のバージョン
[root@ip-10-0-1-189 ~]# mysql -u root -ppassword -h coldairflow-aurora-bgdeploy-old2.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.7.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> select @@aurora_version; +------------------+ | @@aurora_version | +------------------+ | 2.11.1 | +------------------+ 1 row in set (0.01 sec)
元のエンドポイントで移行前のバージョンが参照できていることが確認できました。
また、Green 環境が不要な場合は切り替え後の作業なので先述した手順で Aurora クラスターの削除が必要になります。
参考資料
データベースの更新に Amazon RDS Blue/Green デプロイを使用する – Amazon Aurora
新機能 – Amazon Aurora と Amazon RDS でのフルマネージド型 Blue/Green Deployments | Amazon Web Services ブログ
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。
Recommends
こちらもおすすめ
-
Amazon Aurora MySQL バージョンアップグレード覚書
2022.9.19
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16