Amazon Aurora MySQL で Blue/Green Deployments を使ったマイナーバージョンアップグレードの手順

AWS

2023.3.31

Topics

はじめに

最近、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. 手順の概要

以下手順に沿ってアップグレードを行います。

  1. Blue/Green Deployments 環境構築:Green 環境を作成します
    1. DB エンジンのバージョンアップ:Green 環境を作成後自動的にアップグレードされます
  2. Blue/Green Deployments 切り替え:Blue 環境と Green 環境を切り替えます
  3. Blue/Green Deployments 環境削除:不要になった Blue 環境を削除します
  4. おまけ 環境切り戻し:切り替えた環境を Green 環境から Blue 環境に戻します

基本に、Blue/Green Deployments 機能が自動的に行ってくれるのでコンソールでポチポチして待機になります。
待機する時間が作業時間の多くを占めてます。

1. Blue/Green Deployments 環境構築

では、アップグレード対象の Aurora クラスターを選択して「Blue/Green Deployments」で環境を作成していきます。

各設定については既存と同じよう値になるように設定します。
エンジンバージョンは最新のものを指定しています。

B/G デプロイ構築設定画面

設定する項目はこれだけで後は待機します。
インスタンスを起動する時間+アップグレードの時間があるのでそこそこ待ちます。

B/G デプロイ構築後プロビジョニングしている画面

ちなみに、Green 環境は数分で立ち上がり、データ量によって変わりますが 30 分程度で利用可能となります。
10 分程度待っても Green 環境が立ち上がらない場合は何かしらの問題が発生しているため環境削除したほうが良いと思います。
(Blue 環境が起動できないマイナーバージョンを使っててこの事象になりました)

Green 環境が立ち上がってからバージョンアップが行われます。
ステータス画面から現状の作業について確認することができます。

B/Gデプロイステータス画面

しばらくすると、Green 環境のクラスターが立ち上がってきます。

Green環境立ち上がる画面

1.1 DB エンジンのバージョンアップ

以下 Green 環境が立ち上がると自動的にバージョンアップが行われます。

ソースのリードレプリカが作成完了した画面

イベント画面から各動作について確認することができます。

イベント履歴

クラスターが利用可能になっていることとステータスですべて完了していることが確認できれば Green 環境の構築が完了しています。

B/Gデプロイ環境が構築完了した画面

設定から Blue 環境と Green 環境の差分について確認できます。

B/G環境差分確認

2. Blue/Green Deployments 切り替え

準備が整ったので切り替えを行います。
設定内容に間違いがないことを確認します。

ブルー/グリーン デプロイの切り替え – Amazon Aurora

B/Gデプロイ切り替え設定画面

また必要に応じてタイムアウトの設定を変更します。

B/Gデプロイタイムアウト設定画面

設定したタイムアウトの間でスイッチオーバーできるタイミングを自動的に図ります。
切り替えがうまくいかない場合は、イベント画面からエラーについて確認することができます。

問題がなければ、各インスタンスのステータスが切り替えに変わります。

B/Gデプロイ切り替え中の画面

切り替えが完了するとツリー構造が解除されます。

B/Gデプロイ切り替え完了画面

エンドポイントは自動で切り替わるためアプリ側の操作は不要です。

元のエンドポイントにアクセスしてバージョンを確認します。

[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 環境との紐づけは解除されているので枠だけになってます。

B/Gデプロイ枠削除

これを削除しても Blue 環境と Green 環境にはなにも影響がありません。

B/Gデプロイ枠削除された画面

Blue 環境の Aurora クラスターを削除します。
ここは Aurora クラスターを削除する手順と何も変わりません。
必要に応じてスナップショットを取得します。

Blue環境削除画面

これで対応完了です。

おまけ 環境切り戻し

もし、Blue/Green 環境切り替え後にアプリで問題が発生した場合に Green 環境から Blue 環境に切り戻しする方法について記述します。
(本記事でいうと「Blue/Green Deployments 切り替え」が終わったフェーズを指してます)

概要としては以下手順のように実施します。
どの手順も実施する際にダウンタイムが発生しますのでご注意ください。

  1. Blue 環境を再起動する
  2. Green 環境のクラスター名を別の名前に変更する
  3. 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

Blue環境再起動画面

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 環境のエンドポイント名を変更します。

Green環境エンドポイント切り替え

3. Blue 環境のクラスター名を元のエンドポイントと同じ名前に変更する

Green 環境のインスタンスが利用可能になったことを確認してから Blue 環境を変更します。

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 ブログ

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら