3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CFアプリ開発と管理#14 Blue-Greenデプロイを使用してダウンタイムとリスクを削減

Last updated at Posted at 2017-08-09

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に送信します。

スクリーンショット 2017-08-09 16.30.02.png

ステップ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に送信します。

スクリーンショット 2017-08-09 16.35.26.png

ステップ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の間でロードバランシングを開始します。

スクリーンショット 2017-08-09 16.37.41.png

ステップ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に送信されます。

スクリーンショット 2017-08-09 16.41.56.png

ステップ5:Greenへの一時的なルートを削除する

cf unmap-routeを使用して、demo-time-temp.example.comというルートをGreenから削除することができます。 cf delete-routeを使用してルートを削除したり、後で使用するために予約することができます。 また、変更をロールバックする必要がある場合に備えて、Blueを廃止することもできます。

スクリーンショット 2017-08-09 16.43.48.png

実装

Cloud Foundryのコミュニティメンバーは、Blue-Greenの導入プロセスを自動化するためのプラグインを作成しました。 これらには、

  • Autopilot オートパイロットは、Cloud Foundry Goプラグインであり、ハンドオフ、ゼロダウンタイムのアプリケーション・デプロイメントのためのサブコマンド、ゼロダウンタイムプッシュを提供します。
  • BlueGreenDeploycf-blue-green-deployは、停止時間ゼロのデプロイに関連するいくつかのステップを自動化するCloud Foundryコマンドラインインターフェイス(cf CLI)用の、Goで書かれたプラグインです。
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?