👋
ブルーグリーンデプロイメントとは?徹底解説
1. ブルーグリーンデプロイメントとは?
ブルーグリーンデプロイメント(Blue-Green Deployment)は、システムの稼働環境を2つ用意し、新旧のバージョンを並行稼働させながら安全にデプロイを行う手法 です。
✔ メリット:
- ダウンタイムゼロ: 切り替え時にサービス停止が発生しない。
- 即時ロールバック可能: 問題が発生した場合、すぐに元の環境に戻せる。
- 本番環境での事前テストが可能: デプロイ前にステージング環境として利用できる。
✘ デメリット:
- リソースコストが増える: 2つの環境を並行稼働させるため、インフラコストが増加。
- データの一貫性を確保する必要がある: データベースの同期が課題。
2. ブルーグリーンデプロイの仕組み
(1) 2つの環境を用意
環境 | 役割 |
---|---|
ブルー (Blue) | 現在稼働中のシステム(旧バージョン) |
グリーン (Green) | 新しくデプロイするシステム(新バージョン) |
(2) デプロイ手順
- グリーン環境に新しいバージョンをデプロイ。
- テスト(負荷テスト・動作確認・A/Bテスト)。
- ロードバランサーの切り替え(ブルー → グリーン)。
- 旧環境(ブルー)を一定期間保持(ロールバック用)。
- 問題なければブルー環境を破棄。
3. 実装方法(AWSを例に)
(1) AWS Elastic Load Balancer (ALB) を活用する場合
resources:
ALB:
- BlueTargetGroup (旧バージョン)
- GreenTargetGroup (新バージョン)
-
ALB (Application Load Balancer) で
BlueTargetGroup
からGreenTargetGroup
にトラフィックを切り替え。
(2) Kubernetes での実装
Kubernetes の Service と Ingress を利用し、Blue-Green の2つのバージョンを切り替え。
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app-green
ports:
- protocol: TCP
port: 80
targetPort: 8080
-
my-app-blue
からmy-app-green
へトラフィックをスイッチ。
(3) GitHub Actions による CI/CD パイプライン設定
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: コードをチェックアウト
uses: actions/checkout@v4
- name: 新バージョンのデプロイ
run: kubectl apply -f deployment-green.yaml
- name: トラフィックの切り替え
run: kubectl patch service my-app-service -p '{"spec":{"selector":{"app":"my-app-green"}}}'
4. データベースの同期と注意点
データベースを共有する場合、スキーマ変更が発生すると互換性の問題が起こる可能性がある。
✅ 解決策:
- フォワード互換なデータスキーマ設計(段階的なマイグレーション)。
- Blue-Green でデータベースを分け、同期処理を行う。
- データ移行テストを事前に実施。
5. まとめ:ブルーグリーンデプロイの活用場面
✅ 適しているケース
- 重要なシステムでダウンタイムをゼロにしたい場合。
- 安全に新バージョンをリリースし、即時ロールバックしたい場合。
- 本番環境でテストを行いながらデプロイしたい場合。
❌ 向いていないケース
- リソースコストを抑えたい場合(2つの環境を並行稼働するため高コスト)。
- データベースの互換性問題が頻繁に発生するシステム。
ブルーグリーンデプロイメントは 安全なデプロイを実現する強力な手法 ですが、適切なインフラ設計とデータ管理が求められます。
Discussion