👋

ブルーグリーンデプロイメントとは?徹底解説

2025/03/06に公開

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

ブルーグリーンデプロイメント(Blue-Green Deployment)は、システムの稼働環境を2つ用意し、新旧のバージョンを並行稼働させながら安全にデプロイを行う手法 です。

✔ メリット:

  • ダウンタイムゼロ: 切り替え時にサービス停止が発生しない。
  • 即時ロールバック可能: 問題が発生した場合、すぐに元の環境に戻せる。
  • 本番環境での事前テストが可能: デプロイ前にステージング環境として利用できる。

✘ デメリット:

  • リソースコストが増える: 2つの環境を並行稼働させるため、インフラコストが増加。
  • データの一貫性を確保する必要がある: データベースの同期が課題。

2. ブルーグリーンデプロイの仕組み

(1) 2つの環境を用意

環境 役割
ブルー (Blue) 現在稼働中のシステム(旧バージョン)
グリーン (Green) 新しくデプロイするシステム(新バージョン)

(2) デプロイ手順

  1. グリーン環境に新しいバージョンをデプロイ
  2. テスト(負荷テスト・動作確認・A/Bテスト)。
  3. ロードバランサーの切り替え(ブルー → グリーン)。
  4. 旧環境(ブルー)を一定期間保持(ロールバック用)。
  5. 問題なければブルー環境を破棄

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