Azure 第17回『やってみようシリーズ:Azure Web Apps を作ってみよう!』

Azure Web Apps での Web アプリケーション公開

Microsoft Azure には Web アプリケーションを公開するのに利用できるサービスが複数あります。
具体的には、PaaS・IaaS それぞれに次のようなサービスがあります。

PaaS

  • App Service, App Service on Linux
    • Web Apps
    • API Apps
    • Web Apps for Containers
  • Spring Apps
  • Static Web Apps
  • Functions

IaaS

  • Virtual Machine + Web Server (IIS, Apache, nginx, …)
  • Azure Kubernetes Service
  • Container Instances
  • Azure Container Apps
  • Azure Red Hat OpenShift
  • VM 上のコンテナー(k8s、Openshift、Tanzu)

Webアプリケーションの公開のために、効率的かつ最適化されたコストでAzureを利用するには、Webアプリケーションの特性や目的・運用上の要件などに合わせてこれらのサービスをうまく使い分けることが必要となります。

Web Apps に向いている Web アプリケーション

これらのサービスの中で、一般的なカスタム Web アプリケーションを公開するのに向いているのが Web Apps のサービスです。
Web Apps が向いている用途を以下にまとめています。

  • 一般的なユーザー対話型のモノリシックな Web アプリケーション

    REST API の公開や、マイクロサービスアーキテクチャのアプリケーションは、API Apps や Functions、Service Fabric、コンテナー系のサービスがより効果的です。

  • サーバーサイドで動的なコンテンツ生成を行う Web アプリケーション

    一般的な .NET アプリや Java アプリのような、クライアントからのリクエストに応じてサーバーサイドでコンテンツを動的に生成しクライアントに返す Web アプリケーションが向いています。
    サーバーサイドは静的なコンテンツを返すだけであれば、Static Web Apps がより低コストで利用できます。Static Web Apps でもクライアントサイドでの動的コンテンツ生成は可能です。

  • デプロイ頻度が大きくない

    開発サイクルが短く頻繁にデプロイされるアプリケーションの場合はコンテナー系のサービスが向いています。

  • 極端なスケールは必要ない

    Web Apps でも自動スケーリングが行えますが、スケールの速度や範囲への要求が大きいものはコンテナー系のサービスが向いています。

  • 高度なオーケストレーションを必要としない

    Web Apps でも CI/CD のパイプラインを利用できますが、より高度なオーケストレーションが必要な場合はコンテナー系のサービスが向いています。

  • 特定の(Azure で提供されていない)ミドルウェアを必要としない

    任意のミドルウェアを利用する場合は、IaaS のサービスを利用します。

  • Java Spring Boot と .NET Steeltoe*1 のアプリではない

    Java Spring Boot と .NET Steeltoe は Spring Apps でサポートされています。

*1:Steeltoe は .NET でマイクロサービスアーキテクチャのアプリケーションを開発するためのフレームワークです。

サービスの選択については以下の記事も参照してください。

Web Apps の仕組み・機能と料金

Web Apps は Azure App Service という Azure サービスの一部です。App Service には Web Apps の他に API Apps や Web Apps for Containers のサービスも含まれています。Azure App Service では Azure インフラストラクチャー(仮想ネットワークや仮想マシン)上に「App Service プラン」という仮想的な Web サーバーを作成し、その上で Web Apps や API Apps のアプリケーション、Web Apps for Containers のコンテナーを動作させます。

  • Azure Functions(関数アプリ)を Azure App Service プランで作成した場合も、App Service 上で関数アプリが動作します。(通常の関数アプリはサーバーレスで実行されます。)

Web Apps は以下のような機能を備えています。これらの機能により、実験的で小規模なアプリケーションから大規模で高い可用性が要求されるサービスまで、幅広い Web アプリケーションのニーズに対応しています。

  • 複数の言語とフレームワークへの対応(ASP.NET、ASP.NET Core、Java、Ruby、Node.js、PHP、Python)
  • Windows と Linux のサポート(App Service プランの仮想マシンは Windows と Linux が選択できます。)
  • Web ジョブによるバックグラウンドプログラム(実行ファイル、バッチ、スクリプト)の実行
  • ステージング環境(デプロイスロット)の利用
  • ダウンタイムなしのスロット切り替え(運用スロットとデプロイスロットの相互切り替え)
  • 自動または手動によるスケール(スケールアウト/イン、スケールアップ/ダウン)
  • インフラストラクチャー(ハードウエア環境・オペレーティングシステム・フレームワーク)の自動保守と運用
  • セキュリティ・コンプライアンス準拠(ISO、SOC、および PCI 準拠)
  • 継続的インテグレーションと継続的デプロイのサポートによる DevOps の最適化
  • アプリケーション テンプレートの提供(WordPress、Joomla、Drupal などよく使われる CMS フレームワークのテンプレートが用意されています。)
  • プライベートエンドポイントとプライベートリンクを利用した閉域網接続(イントラネット内でのみ Web アプリケーションを公開)

Web Apps は他の多くの Azure サービスと同様に従量課金制で利用できます。
料金は利用する App Service プランのレベルとサイズによって決まります。レベルとは App Service プランの機能の違いで、以下の表のように無料で利用できる Free から Isolated まで 6つのレベルがあります。

レベル Free 共有 Basic 標準 Premium Isolated
アプリの数 10 100 無制限 無制限 無制限 無制限
ディスク領域 1GB 1GB 10GB 50GB 250GB 1TB
最大インスタンス数 最大3 最大10 最大30 最大100
カスタムドメイン
自動スケール
ハイブリッド接続
仮想ネットワーク接続
プライベートエンドポイント
コンピューティングの種類 Shared Shared Dedicated Dedicated Dedicated Isolated

Basic 以上のプランではさらに仮想 Web サーバーを実行する仮想マシンのサイズが選択できます。レベルとサイズの組み合わせで、従量課金の単価(1時間稼働当たりの料金)が決まります。
Free と共有のレベルは実験や概念検証、テスト、トレーニングなどの非運用目的での利用が想定されています。そのため SLA が設定されていません。運用環境での利用では Basic 以上のレベルを利用してください。

Web Apps を作成する

実際に Web Apps を作成してみましょう。Web Apps の作成方法はいくつもありますが、まず Azure ポータルから作成する手順で行います。

  1. Azureポータルにアクセスし、[リソースの作成] をクリックします。

    [リソースの作成] 画面で [Web アプリ] を見つけ、その下の [作成] をクリックします。

  2. [Web アプリ] が見つからない場合は「Web アプリ」で検索してください。
  3. [Web アプリの作成] 画面が表示されます。
    複数のサブスクリプションが利用できる場合は、まずサブスクリプションを選択してください。
  4. リソースグループを選択または新規作成します。
  5. Web Apps の名前(Web アプリケーションにアクセスする際のホスト名)を入力、ランタイムスタックとオペレーティングシステム、リージョン(地域)を選択します。
    ※通常の Web Apps を作成する場合は [公開] は [コード] のままにしておきます。
  6. App Service プラン(価格プラン)を新規作成または選択します。

    ※Premium プランを選択すると [ゾーン冗長] の選択が行えます。

  7. [次:デプロイ] をクリックして [デプロイ] タブに進みます。
    ここは何も変更せず [次:ネットワーク] をクリックします。
  8. [ネットワーク] タブに進みます。
    ここでも何も変更せず [次:監視] をクリックします。
  9. [監視] タブが表示されます。
    既定ではアプリケーションの動作やパフォーマンスを監視できる Application Insights が有効になっています。監視が必要ない場合は [いいえ] をクリックしてください。
  10. [次:タグ] をクリックして [タグ] タブに進みます。
    必要に応じてタグをつけて、[次:確認および作成] をクリックします。
  11. [確認および作成] タブで作成する Web Apps の構成を確認し、問題なければ [作成] をクリックします。
  12. デプロイが開始されますので、しばらく待ちます。
  13. デプロイが完了すると、以下のように表示されます。
    [リソースに移動] をクリックします。
  14. 作成した Web Apps の概要が表示されます。
    [参照] または [既定のドメイン] に表示されているドメイン名をクリックすると、Web Apps のアプリケーションが表示されます。
  15. まだコードを何もデプロイしていないので、既定のページが表示されます。
  16. Azure ポータルの Web Apps の画面で [デプロイ センター] を開くと、このWeb Apps へのデプロイの方法を選択することができます。
  17. また [FTPS 資格情報] を構成して、FTPS でリソースをアップロードすることもできます。

以上で、Azure ポータルから Web Apps を作成することができました。

Visual Studio から Web Apps にデプロイする

Visual Studio で Web アプリケーションを開発している場合、Visual Studio から直接 Azure に Web Apps を作成し、開発したアプリケーションをデプロイできます。

この手順では、以下のサンプル プロジェクトを利用しています。

ダウンロードした ZIP ファイルを展開し、Visual Studio で dotnet-sqldb-tutorial-master フォルダーにある DotNetAppSqlDb.sln を開いてください。

  1. プロジェクトが開いたら、Web.config ファイルで定義され、Models/MyDatabaseContext.cs で参照されているデータベースへの接続文字列を確認します。
    このプロジェクトの接続文字列は MyDbConnection です。
  2. ローカル実行するため F5 を押します。プロジェクトがビルドされ、ブラウザーにアプリケーションが表示されます。
    簡単な ToDo アプリなので、[Create New] をクリックして新しい項目を追加し、編集や削除が行えることを確認してください。
  3. 動作が確認できたらソリューションを Azure にデプロイしていきます。
    ソリューションエクスプローラーでプロジェクト(DotNetAppSqlDb)を右クリックし、[発行] を選択します。
  4. [公開] 画面が表示されます。[Azure] を選択して [次へ] をクリックします。
  5. Azure サービスの選択画面が表示されます。[Azure App Service (Windows)] を選択して [次へ] をクリックします。
  6. App Service プランの選択画面が表示されます。
    サブスクリプションが複数利用できる場合はまずサブスクリプションを選択し、[新規作成] をクリックします。
    ※既存の App Service プランがある場合は、それを選択することもできます。
  7. App Service プランの作成画面になります。
    名前を入力し、サブスクリプションとリソースグループを選択します。
    リソースグループを新規作成する場合は [新規作成] をクリックして作成できます。
  8. [ホスティング プラン] を選択します。
    [新規作成] をクリックすると、新しい App Service プランが作成できます。
  9. プランの作成画面ではプラン名、リージョン(場所)、サイズを決めてください。
  10. App Service の新規作成に必要な設定が終わったら、[作成] をクリックしてください。
  11. 作成が開始されます。
  12. App Service の作成が完了すると以下のように表示されます。
    プロジェクトのデプロイを進めるために [完了] をクリックします。
  13. 実行プロファイルが作成されます。作成が完了したら [閉じる] をクリックしてください。
  14. プロジェクトを公開する準備ができましたが、このプロジェクトのアプリケーションはデータベース(SQL Server)を利用しているので、Azure 側にもデータベースを用意する必要があります。
    画面を下の方にスクロールして、[サービスの依存関係] 欄にある [SQL Server データベース] を見つけます。
  15. [SQL Server データベース] の右側の [・・・] をクリックし、[接続する] をクリックします。
  16. 接続するデータベースの種類を選択します。
    ここでは [Azure SQL Database] を選択して [次へ] をクリックします。
  17. 新しいデータベースを作成するので、[新規作成] をクリックします。
  18. データベースの作成画面が表示されます。
    [データベースサーバー] 欄の [新規作成] をクリックします。
  19. データベースサーバー名、リージョン(場所)指定し、管理者ユーザー名と管理者パスワードを入力します。
    ※管理者パスワードは以下で解説されている複雑さの要件を満たす必要があります

    ここでは手順を簡単にするためパスワードを使った接続を構成していますが、実運用環境ではマネージド ID を利用し、アプリケーションのコードや構成情報にパスワードのようなシークレットを保存しないことをお勧めします。
    マネージド ID を使った接続については、以下の記事を参照してください。

  20. データベースの新規作成画面に戻りますので、[作成] をクリックします。
    ※[データベース名] は変更しないでください。
  21. データベースの作成が完了すると、以下のような画面に戻ります。[次へ] をクリックします。
  22. 確認しておいたデータベース接続文字列(MyDbConnection)と接続ユーザー名・パスワードを入力し、[次へ] をクリックします。
  23. 構成が完了するまで待ち、完了したら [閉じる] をクリックします。
  24. 公開の画面に戻りますので、上までスクロールして [発行] をクリックします。
  25. プロジェクトのデプロイが進行します。
  26. 完了するまで待ち、以下のメッセージが表示されたら [サイトを開く] をクリックします。
  27. アプリケーションが Azure で実行され、ブラウザーに表示されます。
  28. [Create New] をクリックして新しい項目が追加できることを確認してください。
  29. [Edit]・[Details]・[Delete] の動作も確認してください。
  30. Azure ポータルで確認すると、以下のようなリソースが作成されていることが分かります。

このように Visual Studio で開発した Web アプリケーションは、直接 Azure Web Apps にデプロイすることができます。
この他に Web Apps には GitHub Actions からのデプロイや、さまざまな CI/CD ツールのパイプラインでのデプロイも可能となっています。

まとめ

Azure の Web Apps では ASP.NET、ASP.NET Core、Java、Ruby、Node.js、PHP、Python などで作成された Web アプリケーションを公開することができます。
Web サーバーや Web サーバーを動かすためのサーバー OS の設定・運用・管理を行わなくて良いので、利用者はオンプレミスやホスティングに比べて管理運用の手間・工数を削減できます。また一定範囲での自動スケールやステージング環境(デプロイスロット)の利用・スロット切り替えなどの運用上便利な機能も利用できます。
さらにイントラネット内でのみ Web アプリケーションを公開することも可能なので、既存の社内アプリケーションを Web Apps にリフト&シフトすることも可能です。
合理的なコストで幅広い機能を利用できる Azure Web Apps の活用をぜひご検討ください。

Azure 利用の開始方法や、Web Apps の活用、既存アプリの Azure 移行については、お気軽に当社担当営業までご相談ください。

マルチクラウドの記事