Azure Web Apps: デプロイメントスロットを使用したシームレスな展開

あなたがウェブプラットフォームを介してサービスを提供する医療会社で働いていると仮定します。このプラットフォームのユーザーインターフェイスは、Azure App Services にホストされた PHP ウェブアプリとして設定されています。アプリのソースコードに頻繁に更新が展開され、機能を向上させたりバグを修正したりしています。ただし、これらの更新には問題が生じることがあります:

  • 検出されないバグ厳密なテストにもかかわらず、テスターが時々重要なバグを見落とし、本番環境で問題が発生します。
  • ダウンタイム: バグが特定されると、変更をロールバックすることでサービスの中断が発生し、エンドユーザーをイライラさせます。
  • 展開の遅延展開およびコンパイルプロセスがアプリの応答性に影響を与え、特にピーク時にユーザーの不満を引き起こします。

サービスを中断することなくシームレスな更新を確保するためのより良いソリューションはありますか? はい!Microsoft Azure にはデプロイメントスロットとして知られる強力な機能が提供されています。

Azure デプロイメントスロット

Microsoft Azureのデプロイメントスロットは、アプリケーションの更新を効率的かつ信頼性のある方法で管理するための手段を提供します。デプロイメントスロットを使用すると、アプリケーションの新しいバージョンと古いバージョンの両方を同時に維持できます。これらの2つのバージョン間をスワップすることは、マウスクリック数回で簡単に行え、時間のかかるコードのロールバックが不要となります。 

デプロイメントスロットとは何か、そしてどのように機能するのか?

Azureデプロイメントスロットは、Azure App Servicesにある機能で、Webアプリをすべてのエンドユーザーに公開する前に、展開およびテスト用の独立した環境を作成できるものです。各デプロイメントスロットは、アプリの独立したインスタンスとして機能し、以下のような特定の目的に合わせてカスタマイズできます: 

  • ステージング 本番環境に移行する前に変更をテストおよび検証するため。
  • 本番 エンドユーザーに安定したバージョンのアプリを提供するため。
  • 追加スロット 価格プランに応じて、QA、テスト、その他の環境用のスロットを作成できます。

デプロイメントスロットの主な機能

プリウォームドインスタンス

ステージングスロットにデプロイすると、そのスロットはプリウォームされます。つまり、アプリは完全に初期化され、最小の遅延でユーザーリクエストを処理する準備ができています。

ステージングスロットを本番環境にスワップすることで、ダウンタイムや冷間起動の遅延がないことが保証されます。

シームレスなトラフィックリダイレクト

スワップ中は、スロット間のトラフィックリダイレクションがシームレスに行われ、ユーザーリクエストが失われることがありません。

ロールバック機能

本番環境に新しいバージョンをスワップした後に予期せぬ問題が発生した場合、すぐに「最後に確認された正常な」構成に戻すことができます。

デプロイメントスロットが問題を解決する方法

本番環境へのデプロイ前のバグ検出

新しいコードをステージングスロットにデプロイすることで、テスターは本番環境を模倣した環境でアプリを検証することができます。これにより、未検出のバグのリスクが最小限に抑えられます。 

サービスの中断なし

アプリがステージングスロットでプリウォームされているため、本番環境へのスワップはダウンタイムなしで行われ、エンドユーザーにサービスを中断することなく提供します。

迅速なデプロイメント

スロットのスワップは従来のデプロイメント方法と比べて瞬時であり、デプロイメントに必要な時間が大幅に短縮され、応答性が向上します。

Azure Web Appの設定と構成

1. ウェブアプリを作成する

アカウントで Azure ポータル にサインインします。アプリサービスを検索してクリックします。


ウェブアプリをクリックします。

アプリケーションに必要な1〜7の値を選択し、次に 確認 + 作成 をクリックし、その後 作成 をクリックします。このデモでのウェブアプリの名前は webappdemotosrs.

Click on Go to resource.

webappdemotosrs(ウェブアプリ)は、デフォルトのドメインURLを介してアクセスできます。

2. デプロイメントスロットの作成

 デプロイメントスロット パネルをクリックします。

スロットを追加をクリックします。

スロットに 名前を付けます。


他のスロットから設定をクローンするかどうかを選択します。クローンを選択すると、指定したスロットから新しいスロットに設定がコピーされます。

追加をクリックします。


スロットは指定された名前で作成されます。

Webアプリのデプロイ設定を構成する

このタスクでは、Webアプリのデプロイ設定を構成します。デプロイ設定は継続的デプロイを可能にします。これにより、アプリサービスはアプリケーションの最新バージョンを持つことが保証されます。ステージングスロットで、デプロイメントセンターを選択し、次に設定を選択します。ソースのドロップダウンリストから外部Gitを選択します。他の選択肢にも注意してください。

  • リポジトリフィールドに以下を入力します: https://github.com/Azure-Samples/php-docs-hello-world
  • ブランチフィールドにmasterと入力します。保存を選択します。
  • ステージングスロットから、概要を選択します。
  • デフォルトドメインリンクを選択し、新しいタブでURLを開きます。
  • ステージングスロットが「Hello World」を表示していることを確認します。

3. デプロイメントスロットのスワップ

クリックして スワップ

「スワップ開始」をクリックします。

スワップが完了すると、ステータスを表示する通知がポップアップします。

4. デプロイメントスロットスワップ後 デプロイメントスロットのスワップ

プロダクション デフォルトドメインURLの出力:

ステージング デフォルトドメインURLの出力は以下のようになります


これは、デプロイメントスロットのスワップ後、プロダクションスロットが新しいコードを実行し始め、ステージングスロットが古いコードに戻ることを示しています。

まとめ

この記事では、Azure App Serviceでデプロイメントスロットを作成し使用する方法について学びました。私たちはスロットを使用してアプリの新しいバージョンをテストおよびステージし、それらのデプロイメントスロットを入れ替えました。スロットを入れ替えることで、テスト済みのアプリを本番環境にデプロイし、予期しない問題が発生した際にはデプロイされたアプリをロールバックすることができます。デプロイメントスロットを使用する際は、Azureがスワップの前にアプリをウォームアップし、トラフィックのリダイレクションが瞬時に行われることを忘れないでください。その結果、アプリはサービスの中断やパフォーマンスの低下なしにデプロイされます。

Source:
https://dzone.com/articles/azure-web-apps-deployment-slots