RDS Blue/Green デプロイを試してみた

# RDS Blue/Green デプロイを試してみた

## なぜテストするか
- RDSから除外されるMySQLのバージョンがアナウンスされた
- バッチリ当てはまるインスタンスがあった
- 切り替えテストをやっていると、RDSの画面にBlue/Greenデプロイのアナウンスが有ることに気がついた
- やってみよう

## テスト概要
- db.t3.micro(MySQL5.7.40 → MySQL8.0.31にアップデートする)
- Blue/Green切り替え前に稼働系に書き込みを行って、待機系に反映されることを確認
- 実際に切り替えを行う際の挙動を確認(ダウンタイム計測など)

## やってみた
1. 適当にインスタンス作成
    - db.t3.micro
    - MySQL5.7.40
    - マルチAZなし、バックアップ無し 
1. Blue/Greenデプロイ環境の作成
    MySQL8.0.31にアップデートする以外はデフォルトのままで作成
    ![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/26cc6435-c902-e298-960c-bf8af7fed8aa.png)
1. 怒られた
    バックアップ取得されていないと、レプリケーションを作成できない模様
    ![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/fb0a51ad-68c1-a9b9-d7ed-fa2e2cefd06b.png)
1. バックアップ取得するように変更
    ![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/417990dd-5fac-b74a-f49f-56ad31b6f04a.png)
1. Blue/Greenデプロイ環境の作成(二回目)
    無事成功し、ブルーグリーンデプロイというロールのリソースが作成される
    ![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/8bc933ea-bad6-3143-00bb-e42408f227c5.png)
    しばし待つと、Green側のインスタンスが勝手に作成される
    ![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/5ecdf371-4f6a-e8f3-c494-76af299ae4c9.png)

1. Blue側に書き込みテストしてみる
	```mysql:creat_database
	$ mysql -uroot -phogehoge -hbgdeploy-test.hogehoge.ap-northeast-1.rds.amazonaws.com
	mysql: [Warning] Using a password on the command line interface can be insecure.
	Welcome to the MySQL monitor.  Commands end with ; or \g.
	Your MySQL connection id is 1916
	Server version: 5.7.40-log Source distribution
	
	Copyright (c) 2000, 2022, Oracle and/or its affiliates.
	
	Oracle is a registered trademark of Oracle Corporation and/or its
	affiliates. Other names may be trademarks of their respective
	owners.
	
	Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
	
	mysql> create database bgdeploy1;
	Query OK, 1 row affected (0.01 sec)
	
	mysql> create database bgdeploy2;
	Query OK, 1 row affected (0.01 sec)
	
	mysql> create database bgdeploy3;
	Query OK, 1 row affected (0.01 sec)
	```
1. Green側で同期を確認する
    だいじょうぶそう
	```mysql:show database
	$ mysql -uroot -phogehoge -hbgdeploy-test-green-0bvg3a.hogehoge.ap-northeast-1.rds.amazonaws.com
	mysql: [Warning] Using a password on the command line interface can be insecure.
	Welcome to the MySQL monitor.  Commands end with ; or \g.
	Your MySQL connection id is 17
	Server version: 8.0.31 Source distribution

	Copyright (c) 2000, 2022, Oracle and/or its affiliates.

	Oracle is a registered trademark of Oracle Corporation and/or its
	affiliates. Other names may be trademarks of their respective
	owners.

	Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

	mysql> show databases;
	+--------------------+
	| Database           |
	+--------------------+
	| bgdeploy1          |
	| bgdeploy2          |
	| bgdeploy3          |
	| dbtest             |
	| information_schema |
	| innodb             |
	| mysql              |
	| performance_schema |
	| sys                |
	+--------------------+
	9 rows in set (0.01 sec)
	```
1. 切り替えしてみる
    ![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/7fafabe1-3135-3acb-df88-e2e0667df922.png)
1. 切り替え中の挙動をテスト
    毎秒mysqlpingを打って確認すると、以下の時間で疎通が取れなくなった
    - 疎通不能：January 23, 2023, 18:39:22 UTC+9:00
    - 疎通再開：January 23, 2023, 18:39:48 UTC+9:00
    ![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/7992faed-8b67-afb7-dc11-270962fc10b4.png)
    ![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/01e243f8-57b1-e067-50db-c953999c8ca4.png)

1. 切り替え後の確認(デプロイ)
    - デプロイロールが切り替え完了となっている
    - 元のインスタンス(Brue側)にold1がついている
    - 新しいインスタンス(Green側)が元のホスト名になっている
    ![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/d90d3189-3364-0c5d-090d-bd7b7cc47c24.png)

1. 切り替え後の確認(DBの中身)
    元のホスト名に接続して、MySQL8.0.31でDatabaseが表示されてる事を確認
    ```mysql:show database(after faiover)
	$ mysql -uroot -phogehoge -hbgdeploy-test.hogehoge.ap-northeast-1.rds.amazonaws.com
	mysql: [Warning] Using a password on the command line interface can be insecure.
	Welcome to the MySQL monitor.  Commands end with ; or \g.
	Your MySQL connection id is 27
	Server version: 8.0.31 Source distribution
	
	Copyright (c) 2000, 2022, Oracle and/or its affiliates.
	
	Oracle is a registered trademark of Oracle Corporation and/or its
	affiliates. Other names may be trademarks of their respective
	owners.
	
	Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
	
	mysql> show databases;
	+--------------------+
	| Database           |
	+--------------------+
	| bgdeploy1          |
	| bgdeploy2          |
	| bgdeploy3          |
	| dbtest             |
	| information_schema |
	| innodb             |
	| mysql              |
	| performance_schema |
	| sys                |
	+--------------------+
	9 rows in set (0.00 sec)
	```
1. おそうじ
    - 以下の２つを削除する
        1. bgdeploy-test-green(デプロイロール)
        1. bgdeploy-test-old1(元あったインスタンス)

    ![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233507/70a56610-818f-913e-f0f3-dd5a86949833.png)

1. 終了
----

## 所感
1. メリット
    1. かなりダウンタイムが短くなる(通常2~5分かかるところが数十秒)
    1. 事前にGreen側で動作確認ができる
    1. 同期は問題なくおこなわれている
1. デメリット
    1. テスト中は二倍＋αのコストがかかる
    1. DB切り替わりの際にセッションがはられていると、タイムアウトしてしまう
1. まとめ
    1. なかなかの神機能なのでは？