Blue Green Deploy
サクッとやってみました。
以前、RDSのMySQLのメジャーバージョンアップをした際にもこのBlue Green deployをしたのですが、
今回、インスタンスのt2系廃止に伴い、t4gへとインスタンスタイプ変更が必要になり、
前回同様にBlue Green deployで実施しました。
メジャーバージョンアップする場合の手順もまとめつつ、今回の手順を説明します。
最初に注意点
RDSのBlue Green deployではトラフィックの振り分けをしたあと、
エラーが出た場合にもどす、ということができません。
後述する、以下の章で説明しています。
トラフィックをGreenへと切り替える。
まずはBlue Green deployの作成
作成しましょう。
ここでは2点ポイントがあります。
Point1
ファイルシステムアップグレードも同時にやる場合greenの作成に1時間かかります。
これはblue green作成時のチェック項目として与えられます。
チェックを入れると、この作成時にファイルシステムアップグレードを実施できます。
これは推奨の項目なので、この機会にやってしまいましょう。
この1時間かかる、というのが、現行環境に影響なく対応できてしまうのも、
このBlue Greenデプロイの大きなメリットですね。
Point2
MySQLのversionはここで指定します。
メジャーバージョンアップするなどの要件がある場合は、ここで指定しましょう(作成後にバージョンアップするもできるがこの時点で新しいバージョンで作るのが簡便)。
また注意点として、デフォルトのままの選択だと、自動でMySQLのマイナーバージョンアップが選択されています。
Greenのインスタンスタイプを変更
今回の要件であるインスタンスタイプ変更をここで実施します。
ここでの注意点は一つです。
Point
変更の即時実行を選択しましょう。
デフォルトではメンテナンスタイムにインスタンスタイプ変更する、という設定になっています。
およそ23時頃に設定変更となってしまいます。
特にこのBlue Greenデプロイでは、Green側の変更が現環境に影響されないため、即時変更一択だと思います。
無駄に作業を翌日まで持ち越さないようにするためにも、最終確認画面で、即時変更を選択しましょう。
トラフィックをGreenへと切り替える。
ここまでで、必要な要件を満たした新しいRDS(Green)が作成されました。
もし、ここまででエラーが出て解決不可能であればBlue Green デプロイを削除しましょう。
現環境には何も影響がなく切り戻すことができます。
問題無く進められていれば、切り替えましょう。
注意点は以下です。
トラフィックの切り替え後は戻すことは不可です。
一般のBlue Green deployのイメージとは異なるかもしれません。
たとえば以下記事ではBGデプロイについて、トラフィックを戻せるという記述があります。
ブルーグリーンデプロイメントの利点の1つは、システムのダウンタイムを短くできる点である。現状の本番環境を停止させて変更して戻す従来の運用方法とは違ってシステムをほとんど止める必要が無く、可用性を高められる。
新しい本番環境に切り替えて問題が生じた場合、すぐに現状の本番環境に切り戻せるのも利点の1つ。これもシステムの可用性向上につながる。
これはRDSのBGデプロイではできないようです。
よって、切り替えたあとの動作確認でのエラー検証をステージングで行う、という要件には適しません。
そのような要件は実際のステージング環境で、Blue Green deployにより、デプロイ後検証、その後、production環境にBlue Green deployという形で達成しましょう。
切り替え時には、タイムアウト期間も設定できます。
4回やりましたが、全てで5分以内の切り替えは完了しました。
切り替えのタイムアウト期間は、30 秒から 3,600 秒 (1 時間) まで指定できます。切り替えに指定された期間より長くかかる場合、変更はすべてロールバックされ、どちらの環境にも変更は加えられません。デフォルトのタイムアウト期間は 300 秒 (5 分) です。
そのほかにも切り替えのベストプラクティスとして、以下に詳しいです。
完了後の旧環境の削除
作成したBlue Green deployと、古いブルーというタグがついているデプロイ前の環境を削除しましょう。
ここは別途切り替え後に作業が必要になります。
削除時に、削除前最新のスナップショットを保存するかを聞かれるので必要に応じて取得しましょう。
以上
Blue Green deployでエラーのリスクを低減し、短時間で正確に対応できるメリットを実感できました。
最後まで読んでいただきありがとうございました。