Vorlon.JSチームによる一連の記事「DevOpsのデプロイ方法」を継続します。
Vorlon.JSはnode.jsベースのツールで、Web開発者が、特にモバイルシステムや組み込みシステムで、Webアプリケーションをリモートでテスト、制御、デバッグする便利な方法を提供します。 MSDNのブログで、チームはVorlon.JSの作業を整理する際のDevOpsプラクティスの段階的な実装と、日常のタスクを解決するためのツールの選択について詳しく説明しました。 Vorlon.JSはオープンソースプロジェクトです。
このシリーズの前回の記事では、Visual Studio Team Servicesとリリース管理ツールを使用して必要な環境を自動的に作成し、これらの環境にアプリケーションを展開する方法について説明しました。
Vorlon.JSをデプロイするために使用するAzureリソース管理テンプレートのコンテンツに注意を払うと、 実稼働環境に別のテンプレートを使用することに気付くでしょう。 これは、アプリケーションをAzure Web Appに直接デプロイせず、代わりに「デプロイメントスロット」と呼ばれる非常に便利なWebアプリ機能を使用するためです。
展開スロットとは何ですか?
デプロイスロットは、標準サービスプランから始まるAzure App Serviceで利用できます。 この機能により、本番環境とは異なるスロットにアプリケーションをデプロイできます。 技術的な観点から見ると、スロットは同じサービスプランで起動され、独自のURLを持つ別のWebアプリケーションにすぎません。
スロットを使用すると、環境の即時切り替え(スワッピング)や実稼働環境でのテストなどの機能を使用できます。 スワップは、サービスやダウンタイムを中断することなく、アプリケーションの新しいバージョンにアップグレードできるようにする非常に便利な機能です。
新しいアプリケーションをデプロイするときは、常に「ウォームアップ」に時間がかかります。 これは、ユーザーの意見にある程度影響する可能性があります。 スロットを使用して、アプリケーションの新しいバージョンを別のステージングスロットにデプロイし、アプリケーションを起動してから、ロードバランサーの構成レベルでスロットの仮想IPアドレスをスワップすることでスワップ機能を使用できます。
Vorlon.JSの場合、実稼働環境を記述するARMテンプレートは、ステージングと呼ばれるWebアプリ内にスロットを作成する役割を果たし、リリース管理(ツール)を使用してこのスロットにアプリケーションをデプロイします。 展開の結果、Azure Web Appの運用インスタンスで2つの実行中のWebアプリケーションが取得されます。
この例では、Vorlon.JSアプリケーションの製品版(バージョン1.4)がデプロイされ、 vorlonjs-productionという名前でAzure Web Appの製品スロットに使用されます。 新しいバージョン1.5は、stagingと呼ばれるステージングスロットにデプロイされます。
アプリケーションを起動し、ステージングスロットで最終チェックを行った後、スワップ機能を使用し、バージョン1.5がURLで利用可能になります。 上記のように、スワップ機能は実稼働スロットにバージョン1.5をデプロイせず、ネットワーク構成を更新するだけなので、すべてがダウンタイムなしで数秒で完了します。
スワップ機能は、Azureポータルまたはコマンドラインインターフェイス(PowerShellまたはAzure Cross Platform CLI)で利用できます。
生産テストとは何ですか?
実稼働環境でのテストは一般的な方法で、選択したユーザーのグループを新しいバージョンにリダイレクトします。 これにより、他のすべてのユーザーがアプリケーションを使用できるようにする前に、より早くより高度なフィードバックを取得できます。
Azure App Serviceとデプロイスロットにより、運用環境でのテストが大幅に簡素化されます。 異なるスロットにアプリケーションの2つのバージョンがある場合(たとえば、上記のVorlon.JS 1.4および1.5)、Azureポータルに移動し、ルーティング設定で[トラフィックルーティング]オプションを選択するだけです。
その後、特定の割合のユーザーが別のスロットに自動的にリダイレクトされるように、Azure Web Appルーティングを構成できます。 たとえば、アプリケーションの実稼働トラフィックの30%をステージングスロットにリダイレクトできます。つまり、ユーザーの30%がアプリケーションの新しいバージョンを使用します。
ご注意 ユーザーがトラフィックルーティング機能を使用してこのスロットにリダイレクトされると、ブラウザーから次のHTTPリクエストを送信するときにユーザーが別のバージョンにリダイレクトされないように、Cookieが自動的に作成されます。
おわりに
この記事から明らかになったように、Azure App Serviceの展開スロットとトラフィックルーティング機能を使用すると、アプリケーションの動作を中断せずにアプリケーションを更新できます。 実稼働環境でのテストとAzure Application Insightsなどの分析ツールを組み合わせることにより、情報と必要なメトリックを取得して、新しいバージョンがユーザーに評価されるかどうかを確認できます。