ブルーグリーンデプロイメント ぶるーぐりーんでぷろいめんと
デプロイ戦略ゼロダウンタイムロールバック本番環境リリース管理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上でのブルーグリーンを自動化
ブルーグリーンデプロイメントの切り替え図
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| Argo Rollouts | KubernetesでのブルーグリーンとカナリアリリースをサポートするOSSツール |
| AWS CodeDeploy | ブルーグリーンデプロイをサポートするAWSマネージドデプロイサービス |
関連用語
- カナリアリリース — 一部ユーザーのみ新バージョンに流す段階的リリース戦略
- フィーチャーフラグ — デプロイとリリースを分離し、コードをオン/オフする仕組み
- CI/CDパイプライン — ブルーグリーンデプロイを自動化するパイプライン
- GitOps — Gitへのプッシュでブルーグリーン切り替えを自動化する運用手法
- Kubernetes — Argo Rollouts等を使いKubernetes上でブルーグリーンを実現
- サービスメッシュ — IstioのVirtualServiceでブルーグリーン切り替えをコントロール
- SRE — SREの視点ではリリースリスク低減のためブルーグリーンデプロイを推奨