Blue-green展開は、BlueとGreenという2つの同一の運用環境を実行することにより、ダウンタイムとリスクを削減する手法です。
いつでも、環境の1つだけが本番であり、本番環境はすべてのプロダクション・トラフィックを処理します。この例では、Blueは現在本番で、Greenは待機です。
新しいバージョンのソフトウェアを準備する際には、展開およびテストの最終段階が実際には存在しない環境(この例ではGreen)で行われます。ソフトウェアをGreenに展開して完全にテストしたら、ルーターを切り替えて、すべての着信要求がBlueに代わりGreenに行くようにします。 Greenは現在本番、Blueは待機です。
この手法を使用すると、アプリケーションのデプロイメントによるダウンタイムをなくすことができます。さらに、Blue-Greenデプロイによってリスクが軽減されます。 新しいバージョンのGreenで予期しないことが起こった場合は、すぐにBlueに戻って最後のバージョンにロールバックできます。
注:アプリケーションでリレーショナルデータベースを使用している場合は、Blue-Greenデプロイメントによって、アップデート中にGreenデータベースとBlueデータベースの間に不一致が生じることがあります。データの整合性を最大限にするには、後方互換性と前方互換性のために1つのデータベースを構成します。
注:データベースの移行など、時間のかかるタスクのメンテナンス・ウィンドウで静的保守ページを表示するように、ルートマッピングパターンを調整することができます。このシナリオでは、ルータはすべての着信要求をBlueからメンテナンスにGreenに切り替えます。
注意事項: この記事は、Cloud Foundry Documentaion Using Blue-Green Deployment to Reduce Downtime and Risk (last updated: February 28, 2017) の独自の翻訳とコメントです。内容を保証するものではありません。
Blue-Green デプロイメント Cloud Foundryの例
この例では、簡単なアプリケーション「demo-time」から始めます。このアプリケーションは、"Blue time"と日付/時刻をサーバー上に表示するWebページです。
ステップ1:アプリケーションをプッシュする
cf CLIを使用してアプリケーションをプッシュします。 サブドメイン "demo-time"でアプリケーションの名前を "Blue"にします。
$ cf push Blue -n demo-time
下の図に示すように、
- Blueは Cloud Foundryで稼動しています。
- CFルータは、demo-time.example.comトラフィックのすべてのトラフィックをBlueに送信します。
ステップ2:アプリケーションを更新してプッシュする
今度はアプリケーションを変更してください。 まず、Webページの「Blue」という単語を「Green」に置き換え、アプリケーションのソースファイルを再構築します。 cf pushを再度実行しますが、アプリケーションに「Green」という名前を使用し、別のサブドメインを指定して一時的なルートを作成します。
$ cf push Green -n demo-time-temp
このプッシュ後:
-
元のBlueと更新されたGreenの2つのアプリケーション・インスタンスがCloud Foundry上で実行されています。
-
CFルータは、
demo-time.example.com
のすべてのトラフィックをBlueに送信し続けます。 また、ルータはdemo-time-temp.example.com
のトラフィックをGreenに送信します。
ステップ3:元のルートを緑にマップする
両方のアプリケーションが起動しているので、すべての着信要求が Greenアプリ と Blueアプリに送られるようにルータを切り替えます。 これを行うには、元のURLルート(demo-time.example.com)をcf map-routeコマンドを使用してGreenアプリケーションにマッピングします。
$ cf map-route Green example.com -n demo-time
demo-time.example.comをGreen ...にバインドします。OK
cf map-route
コマンドの後:
- CFルーターは、
demo-time-temp.example.com
のトラフィックをGreenに送信し続けます。 - 数秒以内に、CFルータは
demo-time.example.com
のトラフィックをBlueとGreenの間でロードバランシングを開始します。
ステップ4:Blueへの経路をアンマップ
グリーンが正常に動作していることを確認したら、cf unmap-route
コマンドを使用して、Blueへのルーティング要求を停止します。
$ cf unmap-route Blue example.com -n demo-time
Unbinding demo-time.example.com from blue... OK
cf unmap-route
コマンドの後:
- CFルーターはBlueへのトラフィックの送信を停止します。
demo-time.example.com
のすべてのトラフィックがGreenに送信されます。
ステップ5:Greenへの一時的なルートを削除する
cf unmap-route
を使用して、demo-time-temp.example.com
というルートをGreenから削除することができます。 cf delete-route
を使用してルートを削除したり、後で使用するために予約することができます。 また、変更をロールバックする必要がある場合に備えて、Blueを廃止することもできます。
実装
Cloud Foundryのコミュニティメンバーは、Blue-Greenの導入プロセスを自動化するためのプラグインを作成しました。 これらには、
- Autopilot オートパイロットは、Cloud Foundry Goプラグインであり、ハンドオフ、ゼロダウンタイムのアプリケーション・デプロイメントのためのサブコマンド、ゼロダウンタイムプッシュを提供します。
-
BlueGreenDeploy:
cf-blue-green-deploy
は、停止時間ゼロのデプロイに関連するいくつかのステップを自動化するCloud Foundryコマンドラインインターフェイス(cf CLI)用の、Goで書かれたプラグインです。