Aurora の Blue/Green デプロイで少し遊んでみた

こちら↓について、Aurora で軽く遊んでみたらいくつか途中でハマったのでメモを残しておきます。

- **[【衝撃】AWSのRDSがデータを失わないBlue/Greenデプロイに対応しました](https://dev.classmethod.jp/articles/rds-bg-deploy/)（DevelopersIO）**

https://dev.classmethod.jp/articles/rds-bg-deploy/

---

**2022/11/30 追記：**
GA になっているのに「ベータ版」と書くのも厭味ったらしいので（？）タイトルから削りました。
（正直、本当に「ベータ版」だと思っていました… ~~続編とあわせて読み進めると勘違いした意味が分かるのでは、と…~~ ）

---

## 1. Aurora MySQL v1 のクラスタを用意

「あれ？ 2022/09/27 で新規クラスタは作れなくなったんじゃ…？」と思うかもしれませんが、これを書いている 2022/11/29 時点ではまだ作れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/47049173-85e4-a041-be50-a310a8924ec8.png)

なお、データは **[Sakila Sample Database](https://dev.mysql.com/doc/sakila/en/)** を入れてみました。

https://dev.mysql.com/doc/sakila/en/

- **[MySQLのSakila Sample Database を使ってみよう](https://masayuki14.hatenablog.com/entry/sakila)（主夫ときどきプログラマ）**

https://masayuki14.hatenablog.com/entry/sakila

（注） Aurora MySQL v1 にそのまま入れてしまうと、一部テーブルでストレージエンジンとして MyISAM を指定している部分でエラーになるので、SQL ファイルを一部修正します。

```sh:データ投入（途中で失敗）
$ mysql -u admin -h my56.cluster-XXXX.ap-northeast-1.rds.amazonaws.com -p < <( \
>     wget 'http://downloads.mysql.com/docs/sakila-db.zip' \
>     && unzip -o sakila-db.zip 1>/dev/null \
>     && cat sakila-db/sakila-schema.sql sakila-db/sakila-data.sql \
>   )
--2022-11-28 12:04:02--  http://downloads.mysql.com/docs/sakila-db.zip
Resolving downloads.mysql.com (downloads.mysql.com)... Enter password: 23.206.10.112, 2600:140b:1a00:3ad::2e31, 2600:140b:1a00:39c::2e31
Connecting to downloads.mysql.com (downloads.mysql.com)|23.206.10.112|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://downloads.mysql.com/docs/sakila-db.zip [following]
--2022-11-28 12:04:02--  https://downloads.mysql.com/docs/sakila-db.zip
Connecting to downloads.mysql.com (downloads.mysql.com)|23.206.10.112|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 729523 (712K) [application/octet-stream]
Saving to: ‘sakila-db.zip’

100%[========================================================================================================================================>] 729,523     2.72MB/s   in 0.3s   

2022-11-28 12:04:02 (2.72 MB/s) - ‘sakila-db.zip’ saved [729523/729523]
（DB パスワード入力）

ERROR 1238 (HY000) at line 196: Variable 'default_storage_engine' is a read only variable
```

```sh:viで修正
$ vi sakila-db/sakila-schema.sql
```

```sql:修正部分
--
-- Table structure for table `film_text`
-- 
-- InnoDB added FULLTEXT support in 5.6.10. If you use an
-- earlier version, then consider upgrading (recommended) or 
-- changing InnoDB to MyISAM as the film_text engine
--

-- Use InnoDB for film_text as of 5.6.10, MyISAM prior to 5.6.10.
-- SET @old_default_storage_engine = @@default_storage_engine;
-- SET @@default_storage_engine = 'MyISAM';
/*!50610 SET @@default_storage_engine = 'InnoDB'*/;

CREATE TABLE film_text (
  film_id SMALLINT NOT NULL,
  title VARCHAR(255) NOT NULL,
  description TEXT,
  PRIMARY KEY  (film_id),
  FULLTEXT KEY idx_title_description (title,description)
) DEFAULT CHARSET=utf8mb4;

-- SET @@default_storage_engine = @old_default_storage_engine;

--
-- Triggers for loading film_text from film
--
```

- `SET @old_default_storage_engine = @@default_storage_engine;`
- `SET @@default_storage_engine = 'MyISAM';`
- `SET @@default_storage_engine = @old_default_storage_engine;`

をコメントアウトしました。

やり直してみます。

```sh:データ投入再試行
$ mysql -u admin -h my56.cluster-XXXX.ap-northeast-1.rds.amazonaws.com -p < <( \
>     cat sakila-db/sakila-schema.sql sakila-db/sakila-data.sql \
> )
Enter password:
（DB パスワード入力）
```

今度は行けました。

```sh:DB・テーブル確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
+--------------------+
4 rows in set (0.00 sec)

mysql> use sakila;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+
23 rows in set (0.00 sec)
```

## 2. クラスタでブルー/グリーンデプロイを作成

早速ブルー/グリーンデプロイを作成してみます。

まだベータですね（嘘なんですけどまんまと騙されました）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/3bd1cf53-31d2-bb50-c1fd-7540498f38b9.png)

ちなみに、当初ここで↓の画面が出て先に進めず時間を溶かしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/0c3fe550-9007-c61e-cecf-9619132cbbfb.png)

ブラウザを開き直したところ、先に進めました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/1547dccd-5b83-35c3-e092-90f43a575522.png)

~~**Aurora MySQL v1 から直接作成できる Green（ステージング）環境は、今のところ同じ v1 だけ** のようです。残念。~~

---

**2022/12/01 追記：**
今日見たら直接 v2 の Green 環境が作成できるようになっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/c9468d95-15da-1ed1-3850-3cb14d290cbc.png)

---

そしてここで先に進もうとしていくつか問題が。

### クラスタのパラメータグループで binlog を有効にする必要がある

Blue → Green のレプリケーションに binlog を使うから、でしょう。

というわけで、（とりあえず`MIXED`で）**binlog を有効にしたパラメータグループに変更して** 再チャレンジしてみたのですが…。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/a41febeb-7f99-dcd8-1679-142738276e3d.png)

↑のメッセージで怒られました。

### クラスタと DB のパラメータグループで設定を揃える必要がある

クラスタと DB のパラメータグループの両方にある項目について、どこまで設定を揃えれば良いのかは分かりませんが、差異を見つけて修正して（設定を揃えて）、今度こそ…！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/7ae1cbca-01fc-e500-8765-9e14b04be352.png)

行けたようです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/fbdf8d13-cb49-5e09-232e-d0afef08e095.png)

```sh:Green環境データ確認
$ mysql -u admin -h my56-green-nlq1ml.cluster-XXXX.ap-northeast-1.rds.amazonaws.com -p
Enter password: 
（中略）
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
+--------------------+
4 rows in set (0.00 sec)

mysql> use sakila;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+
23 rows in set (0.01 sec)
```

## 3. Green（ステージング）環境をバージョンアップしてみる

Green 側のクラスタに対してバージョンの変更をかけてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/5a817961-733c-e198-f42f-eec70feed5c1.png)

当然ですが **v3 に直接バージョンアップすることはできません。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/e42df90d-ef34-0030-a5a8-e343a139dbc0.png)

バージョンアップできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/2d88d50b-76f2-7f46-c462-10338ab8a933.png)

なお、時間の都合で「バージョンアップ中に Blue（本番）環境でデータを更新するとどうなるか」「実際のクラスタ切り替えでどういう挙動になるのか」等、細かいことは試していません。

~~（アドベントカレンダーの記事で書く…かもしれません）~~ 続きの記事を書きました。

- **[Aurora の Blue/Green デプロイで少し遊んでみた（スイッチオーバー編）](https://qiita.com/hmatsu47/items/922c4f23a1e66f948947)**

https://qiita.com/hmatsu47/items/922c4f23a1e66f948947

## 4. その他

一通り遊んで、「さて、クラスタを止めるか」と思い…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/9e684f57-f453-9f53-d827-5f24b71fb213.png)

なんと！

Green（ステージング）環境が存在する状態では一時停止できないようです。

（「with read replicas」が誤解を生みそう）

仕方なく、Green（ステージング）環境を削除して、一時停止しました。