開発プロセス

ブルーグリーンデプロイメント ぶるーぐりーんでぷろいめんと

デプロイ戦略ゼロダウンタイムロールバック本番環境リリース管理CI/CD
ブルーグリーンデプロイメントって何?

簡単に言うとこんな感じ!

本番環境を「青(現行)」と「緑(新バージョン)」の2つ用意して、テストが完了したらトラフィックをぱっと切り替えるデプロイ方法だよ。問題があればワンクリックで青に戻せるし、切り替え中もサービス停止ゼロ(ゼロダウンタイム)で更新できるんだ!


ブルーグリーンデプロイメントとは

ブルーグリーンデプロイメントとは、現行バージョン(Blue)と新バージョン(Green)の2つの本番環境を用意し、テスト完了後にトラフィックを一気に切り替えるデプロイ手法です。ダウンタイムなしで新バージョンをリリースでき、問題発生時には即座にBlueへ切り戻しできるため、リリースリスクを大幅に低減します。

手順は①Greenに新バージョンをデプロイ→②Greenで動作確認・テスト→③ロードバランサーの向き先をBlueからGreenに切り替え→④問題なければBlueを次回の更新用に待機。問題が発生した場合は③の切り替えをBlueに戻すだけで即座にロールバックできます。

注意点として、2つの環境を常時維持するためにインフラコストが約2倍かかります。また、データベーススキーマ変更がある場合は両バージョンが同じDBを参照するため、後方互換性のある変更(カラム削除は後回しにするなど)の設計が必要です。


デプロイ戦略の比較

デプロイ戦略仕組みダウンタイムロールバック速度インフラコスト
ブルーグリーン2環境を切り替えゼロ即時(切り戻し)2倍
カナリアリリース一部トラフィックを新版にゼロ段階的に切り戻し少し増加
ローリングアップデート旧→新に順次置換ゼロ遅い(順次)ほぼ同じ
リクリエート(停止置換)旧を落として新を起動あり旧バージョン再起動最小

歴史と背景

  • 2010年:Jez HumbleとDavid Farleyの「Continuous Delivery」でブルーグリーンデプロイメントが体系的に紹介される
  • 2013年〜:AWSのElastic Load Balancerのターゲットグループ切り替えで簡単に実現できるようになる
  • 2015年〜Kubernetes・コンテナの普及とともに、ブルーグリーンが標準デプロイ戦略の1つとして定着
  • 2017年〜:AWS CodeDeploy・Spinnaker等のデプロイツールがブルーグリーンを組み込み機能として提供
  • 2020年〜:Argo Rollouts・Flagger等のProgressiveDeliveryツールがKubernetes上でのブルーグリーンを自動化

ブルーグリーンデプロイメントの切り替え図

ブルーグリーンデプロイメントの切り替えフロー 切り替え前 ユーザー ロード バランサー Blue v1.0(現行) Green v2.0(新版) 切り替え後 ユーザー LB 切替済 Blue 待機中 Green v2.0(本番) 問題発生時はLBをBlueに戻すだけで即ロールバック 切り替え時間:数秒〜数十秒 Blueは切り替え後も一定期間待機させ、問題が出なければ廃棄

関連する規格・RFC

規格・RFC番号内容
Argo RolloutsKubernetesでのブルーグリーンとカナリアリリースをサポートするOSSツール
AWS CodeDeployブルーグリーンデプロイをサポートするAWSマネージドデプロイサービス

関連用語

  • カナリアリリース — 一部ユーザーのみ新バージョンに流す段階的リリース戦略
  • フィーチャーフラグ — デプロイとリリースを分離し、コードをオン/オフする仕組み
  • CI/CDパイプライン — ブルーグリーンデプロイを自動化するパイプライン
  • GitOps — Gitへのプッシュでブルーグリーン切り替えを自動化する運用手法
  • Kubernetes — Argo Rollouts等を使いKubernetes上でブルーグリーンを実現
  • サービスメッシュIstioのVirtualServiceでブルーグリーン切り替えをコントロール
  • SRESREの視点ではリリースリスク低減のためブルーグリーンデプロイを推奨