最終更新:

ブルーグリーンデプロイの仕組み ― 停止時間を抑えて本番を切り替える方法


新版を確認して通信先を切替
利用者通信の振り分け切替前切替後Blue:現行版Green:新版共有DBの例
矢印は通信の行き先、橙の破線はDB接続です。新旧のデータ互換性と処理中の通信を確認して切り替えます。戻しても新版のデータ変更が元に戻る保証はありません。
ひよこ ひよこ
ブルーグリーンデプロイって何なの?色の名前がついてて不思議なんだけど…
ペンギン先生 ペンギン先生
本番に使える環境を2つ用意して、現行版のブルーを動かしたまま、新版をグリーンで準備・確認する手法だよ。準備ができたら通信の行き先を切り替えて、リリース時の停止を減らすんだ。ただし切替だけで停止時間ゼロを保証するものではなく、DBやセッション、処理中の通信への配慮が必要だよ。
ひよこ ひよこ
へえ!もし新しいバージョンにバグがあったらどうするの?
ペンギン先生 ペンギン先生
旧環境を残しておけば、通信を戻すことで素早いロールバックを狙えるよ。ただし、旧版が新版の書き込んだデータや現在のDB構造を扱えることが前提なんだ。新版が壊したデータまで切替で元に戻るわけではないし、ルーティングの反映にも時間がかかる場合があるよ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
カナリアは一部の利用者への通信から新版を試す方法、ローリングは稼働中のサーバーやPodを少しずつ入れ替える方法だよ。ブルーグリーンは環境を2つに分ける構成が特徴で、一括切替が典型例。製品によってはカナリアのような段階的な通信切替も組み合わせられる。ローリングも必ず1台ずつとは限らないんだ。
ひよこ ひよこ
AWSとかKubernetesだと具体的にどうやって実現するの?
ペンギン先生 ペンギン先生
AWSのALBなら新旧のターゲットグループを用意し、リスナールールで転送先を変更する方法があるよ。Kubernetesなら新旧のPod群を用意し、Serviceのselectorで対象を変更する構成が考えられる。ただし新版の準備完了や接続の終了を確認する必要があり、アプリ側の対応が一切不要という意味ではないよ。
ひよこ ひよこ
データベースも2つ用意するの?
ペンギン先生 ペンギン先生
共有DBを使う構成もあるよ。その場合は新旧両方で使える変更を先に入れ、新版へ移した後、旧版へ戻す必要がなくなってから不要な項目を削るのが基本だね。カラム追加も、旧版が追加項目を扱えなければ壊れることがある。『追加なら必ず安全』ではなく、新旧両方で動作を確認するんだ。
ひよこ ひよこ
環境を2つ維持するってことは、コストも2倍になるんじゃない?
ペンギン先生 ペンギン先生
同じ大きさのアプリ環境を同時に動かす間は、その部分のリソースが2組必要だね。でもDBを共有するか、旧環境をどれくらい残すかなどで総額は変わるから、請求額が必ず2倍とは言えないよ。旧環境を早く止めれば費用は抑えられるけれど、戻すときの再起動時間も考える必要があるんだ。
ひよこ ひよこ
切り替えの瞬間にユーザーのセッションが切れたりしないの?
ペンギン先生 ペンギン先生
ログイン状態を旧サーバーのメモリだけに持つと、新版へ引き継げないことがあるよ。新旧から使える外部ストアに保存するなど、状態の共有と互換性を設計しよう。さらに旧環境の処理中のリクエストや接続を終えてから停止する設計も必要で、通信先を変えた瞬間に旧サーバーを止めるのは避けたいね。
ひよこ ひよこ
小さいチームでも使えるの?
ペンギン先生 ペンギン先生
使えるよ。例えばCloud Runには、新版のリビジョンを作って通信を割り当てたり、以前のリビジョンへ戻したりする機能がある。ただし通信の変更は即時ではないと公式資料にも明記されているんだ。マネージドサービスでも、DB互換性や状態管理の確認は必要。切替前の検証と、戻せる条件を決めておくことが大切だね。

注文画面を新版へ切り替える場面で考える

今の注文画面を動かしたまま、別の環境で新しい画面を確認する。準備ができたら、利用者のアクセス先を切り替える。これがブルーグリーンデプロイの入口です。新旧2つの環境を用意することと、すべての問題を切替だけで解決できることは同じではありません。

たとえば新版がDBの項目を削除し、旧版がその項目を必要としていたら、通信を戻すだけでは復旧できません。また、注文処理の途中で旧環境を止めれば、処理中の利用者に影響する可能性があります。

まずテスト環境で「新しい注文を受け付ける」「処理途中の注文を終える」「旧版へ戻してデータを読む」の3場面を書き出してみましょう。どこまで戻せるかを決めると、図の切替先と共有DBの役割がつながります。少しずつ公開する違いはカナリアリリース、入れ替え方はローリングアップデートで確認できます。

参考資料