RDSのblue/greenデプロイメントを試行

## 背景
私自身、開発が中心の仕事内容でしたが最近は
運用やデプロイ周りのタスクが出てきました。

その中でもRDSを触ることが多くなってきましたが、以下のような内容を
AWS様から進められました。

![alert_rds_bule_green.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/9fe2dd38-32d6-fe74-ca0d-765fb52781f9.png)

というわけで、blue/greenデプロイメントを実際に試してみた！
。。というシンプルな記事になります。



## 概要
### Blue/Greenデプロイメントとは？
Blue/Greenデプロイメントは、ソフトウェアのデプロイメント手法の一種です。
システムのアップデートや新機能のリリースをスムーズかつ安全に行うために使われたりします。

本番環境におけるアプリケーションやサービスのリリースにも使用されます。

### Blue/Greenについて
Blue/Greenデプロイメントでは、次の2つの環境が利用されます。

1. Blue環境（本番環境）:
本番環境として稼働している状態。
ユーザートラフィックはこの環境に向けられる。

2. Green環境（ステージング環境）:
新しいバージョンのアプリケーションやサービスがデプロイされた環境を指す。
Blue環境とは別に構築され、テストや検証が行われた後、
本番環境への切り替えが行われる。

## 試しにデプロイしてみよう！

### 1. 適当にデータベースを作成しよう

デプロイ用に何かしらデータベースを作成しましょう！
画像上部に記載されてますが、アップグレード中のダウンタイム最小限に抑えることを
目的として、AWSが推奨してるっぽいですねえ。

![alert_rds_bule_green.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/55d3bc45-00cf-9d58-5d9e-4ec14444f73d.png)

データベース作成参考：

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html

### 2.Blue/Green デプロイメントの作成

手順1で作成したデータベースを選択し、
「アクション」から「ブルー/グリーンデプロイの作成-新規」を押下。

![スクリーンショット 2023-12-03 22.23.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/7bba4a38-5110-bd23-fa06-8c41042dde94.png)


次は識別子を命名します。

![3_setting_iden.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/e38931eb-2a96-521a-e4b8-55f4dc442144.png)

:::note warn
「_(アンダースコア)」など識別子に使えない文字列や記号に注意！
下記添付画像参照
:::

![6_setting_error_validation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/230b0766-44d1-d26c-af3a-26fd15f941c1.png)

最後にストレージやコストを確認し、問題なければ
「ステージング環境の作成」を押下して作成実行！

![5_setting_execute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/02cdee1c-ea6f-aa4e-f527-b6ab61767c7f.png)

### 下記エラーが出たら。。
作成したデータベースは、バックアップが存在しないと
blue/greenデプロイメントできないみたいです。。

![8_setting_error2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/3001f672-e923-3e59-ae43-c0d55b17b945.png)

その場合は、データベースに戻り
「アクション」→「バックアップを有効にする」を押下してバックアップを作成しましょう。

#### ※バックアップ作成には10分程度かかりその間は手順を進められないことに注意。。

![9_backup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/a97a330a-3a5f-0a51-8d2b-824bcd5c8456.png)

### 3. 作成後の確認
データベースを選択し、Blue/Green デプロイメントの詳細を見てみましょう。

各タブには、Blueデプロイ用のセクションとGreenデプロイ用のセクションが存在します。
グリーン環境の RDS DB インスタンスは変更を加えることが可能です！

![11_blue_green_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/676e2c1d-ac8a-006c-5ad6-3fa2cd5b41ca.png)

### 4. 切り替えをしてみよう

Green 環境に必要な変更を行ったら、
Blue/Green デプロイメントのデータベースを選択し、
「アクション」→「切り替え」を選択して切り替えを実行してみましょう！

![12_切り替え.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/d3d944c5-bee0-c181-0641-db12f6c70111.png)

Blue環境とGreen環境の設定を確認して。。

![14_切り替え1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/831d8648-9cc6-6706-d0c4-7d6b49f2670a.png)

タイムアウトも設定します。

:::note warn
切り替えに指定した期間よりも長い時間がかかる場合、
変更はロールバックされることに注意！
:::

![timeout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/2f25e4dc-3751-8f50-161e-5e47879abc38.png)



設定に問題ないことを確認したら、「切り替え」を押下すると完了です！
切り替えを実行すると、下記のようにステータスが「切り替え」になります！

![FireShot Capture 015 - データベース - RDS - ap-northeast-1 - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/abab10bd-d1c4-06bd-b893-d88a8cfa90eb.png)

### 5. 実行確認

数分後に切り替えが完了しました！
Blue環境名に「old」がついており、Green環境が新しい本番データベースということになります。

手順自体はそんなに時間もかからず難しくないですね！

![FireShot Capture 017 - データベース - RDS - ap-northeast-1 - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/73534eb6-16a2-ace2-ffdd-223167bc4b6b.png)

## 注意点
・旧Blueの環境から、Green環境を再度つくることはできない
・切り替え後に切り戻しはできない

## 参考文献

・RDSのBlue/Greenデプロイメントを試してみた。

https://dev.classmethod.jp/articles/rds-blue-green-deployment/

・Amazon RDS DB インスタンスの作成

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html