Azure Web App の主な機能と Azure portal での設定方法をまとめた

# はじめに
`Azure App Service`の製品である、`Azure Web App`について勉強したので、学んだことを本記事にまとめます。`Web App`は豊富な機能を持つ`PaaS`の`Web`サーバーになります。`Web`サーバーを用意する際、`Azure Virtual Machine`上に`Web`サーバーのソフトウェアをインストールして用意しても当然問題ありませんが、環境のセットアップ、スケーラビリティ、冗長化、継続的インテグレーション、認証、テスト、監視、などを実施するには実装コストもインフラの運用コストも非常に高いです。そこで、本記事で紹介している`Web App`を用いることで、これらのコストを抑えて堅牢な`Web`サーバーを簡単に利用することができるため、よりアプリケーションやコンテナの開発に集中的に取り組むことができ、生産的な開発に繋がります。`Microsoft`の公式ドキュメントを元に、以前`App Service`の基本をまとめた記事があるので、興味のある方はこちらもご覧ください。

https://qiita.com/y__saito/items/44d06a0bcf703aadba55

# Web Appの特徴
- [OSとランタイムの管理が不要](#osとランタイムの管理が不要)
- [継続的インテグレーション](#継続的インテグレーション)
- [Easy Authによる簡単な認証機能の利用](#easy-authによる簡単な認証機能の利用)
- [柔軟なスケーラビリティ](#柔軟なスケーラビリティ)
- [デプロイスロットのスワッピング](#デプロイスロットのスワッピング)
- [仮想ネットワークでの占有利用](#仮想ネットワークでの占有利用)
- [App Service Planごとの料金体系](#app-service-planごとの料金体系)
- [補助的なバックグラウンドジョブの実行](#補助的なバックグラウンドジョブの実行)
- [VNet統合](#vnet統合)
- [カスタムドメイン](#カスタムドメイン)
- [SSL証明書](#ssl証明書)
- [CMS](#cms)
- [ハイブリッド接続](#ハイブリッド接続)

## OSとランタイムの管理が不要
`Web App`では、`Windows`、`Linux`、`Container`、の3種類のアプリケーションと、`.NET`、`Node.js`、`Java`、`PHP`、`Python`、`Ruby`、`Go`、のランタイムが選択できます。選択したランタイムは、`Microsoft`側で自動的にパッチ適用をしてくれるため、ユーザーによる管理が不要になります。

2023年10月30日現在に`Azure`ポータルから`Web App`を作成する際に選択できるランタイムを以下の表にまとめました。

|Runtime|Windows|Linux|Container|
|---|---|---|---|
|ASP.NET V4.8, ASP.NET V3.5|〇|×|〇|
|.NET 8(LTS)(プレビュー), .NET 7 (STS), .NET 6(LTS)|〇|〇|〇|
|Java 17, Java 11, Java 8|〇|〇|〇|
|Node 18 LTS, Node 16 LTS|〇|〇|〇|
|PHP 8.2, PHP 8.1, PHP 8.0|×|〇|〇|
|Python 3.11, Python 3.10, Python 3.9, Python 3.8|×|〇|〇|

:::note info
`Web App for Containers`では、`Azure Container Registry`や`Docker Hub`からコンテナーイメージをデプロイすることが可能です。
:::

`Azure`ポータルで`Web App`を作成する際は、以下の赤い点線の枠内の項目を選択することで、`Windows`、`Linux`、`Container`を選択することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/b652a9c6-a815-b7de-3ebc-e88192e2dde8.png)

## 継続的インテグレーション
`Web App`では、`Azure DevOps`、`GitHub`、`Bitbucket`による`CI/CD`環境の構築が簡単にできます。

https://learn.microsoft.com/ja-jp/azure/app-service/deploy-continuous-deployment?tabs=github

:::note info
`Web App`は手動によるデプロイにも対応しており、`Git`、`Azure CLI`、`FTP`、によるデプロイが可能です。
:::

`Azure`ポータルで継続的インテグレーションを設定するには、「デプロイセンター」をクリックし、「ソース」から使用するプロバイダーを選択してください。下図は`GitHub`をソースとして選んだ場合の図であり、選択した組織、リポジトリ、ブランチ、を選択して設定ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/f8c5faec-757d-3161-6616-62de3ba51de4.png)

継続的デプロイのソースとして、`GitHub`以外にも`Bitbucket`やローカル`Git`、`Azure Repos`を選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/ee9f7048-f3da-16fd-73dc-1f39667fe9f8.png)

## Easy Authによる簡単な認証機能の利用
`Web App`組み込みの機能である`Easy Auth`を有効にすることで、認証認可を簡単に実現できます。認証と認可のミドルウェアは`App Service`と同じ`VM`で実行され、全ての`HTTP`要求は`Web App`の前に通過します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/3154ff50-cff0-ba73-a4a9-a08643bcc7dd.png)

https://learn.microsoft.com/ja-jp/azure/app-service/overview-authentication-authorization

`Easy Auth`により、ソースコードを変更することなく、様々な認証プロバイダーと連携した認証機能が利用できます。認証プロバイダーとして利用できるのは、`Azure Active Directory`、`Microsoft`、`Facebook`、`Google`、`Twitter`、`GitHub`、が使えるようになっています。

以下は、`GitHub`を認証プロバイダーとして利用した場合の`Easy Auth`の設定方法です。[GitHub](https://github.com/)にログインし、画面右上のアイコンを選択した後、「Settings」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/d6767a42-30c6-0df5-52e0-b04d65700d01.png)

次に、「Developer Settings」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/d13ded1e-a24c-8666-967c-6ef260e1c9a5.png)

「OAuth Apps」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/3479a9fe-bba3-2e12-11d5-0a6749840ca6.png)

「Register a new application」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/de11302b-ee31-ee85-057c-0509239bfa6a.png)

`Application name`と`Homepage URL`と`Authorization callback URL`を入力して、「Register application」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/66cb2ea3-f7ce-b0bc-d0b6-4737ae8f2622.png)

:::note info
`Homepage URL`は`Azure`ポータルの`Web App`の概要画面の「既定のドメイン」(下図の赤枠で囲われた`URL`)になります。`Authorization callback URL`は、`Homepage URL`に`/.auth/login/github/callback`のパスを追加したものになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/e0a3e3a3-5e89-c1cf-2421-0b14cfca56a5.png)

今回の場合の`Homepage URL`と`Authorization callback URL`は以下のようになります。
- `Homepage URL`：`https://sample-web-app-20231029.azurewebsites.net`
- `Authorization callback URL`：`https://sample-web-app-20231029.azurewebsites.net/.auth/login/github/callback`
:::

「Client ID」をコピーし、「Generate a new client secret」を押して、表示された「Client secrets」をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/29a86895-4817-3a95-91fe-da1c563bcfad.png)

「IDプロバイダーを追加」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/f2218816-b8b7-a37e-5f55-7447b31de40a.png)

「IDプロバイダー」を選択し、「クライアントID」「クライアントシークレット」にコピーした情報を貼り付けます。その後「追加」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/54f4c6d4-c709-b851-21bd-ef1dd3292120.png)

プロバイダー一覧に、`GitHub`が表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/12a63fdd-bb88-fac2-c756-ee36fcaaa02a.png)

`https://sample-web-app-20231029.azurewebsites.net`にアクセスすると、`GitHub`のサインイン画面が表示され、認証機能が実装されていることを確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/2548f19d-190d-9d27-2095-4bd10891961e.png)

https://learn.microsoft.com/ja-jp/azure/app-service/configure-authentication-provider-github

## 柔軟なスケーラビリティ
`Web App`では、自動スケーリングの機能が実装されており、スケールアウト、スケールインによるスケーリングを行うことができます。`Web App`では、自動スケーリングと、スケーリングルールによる自動スケーリングがあります。

:::note info
自動スケーリングとは、アプリケーションの負荷に応じてリソースを自動的に追加および削除するために使用できるサービスです。
:::

以下の表に、`Web App`で利用できるスケーリングオプションの比較をまとめます。

||手動|自動スケーリング|スケーリングルールによる自動スケーリング|
|---|---|---|---|
|利用可能なレベル|Basic以上|Premium V2, Premium V3|Standard以上|
|ルールベース|×|×|〇|
|スケジュールベース|×|×|〇|
|常時使用可能なインスタンス|×|〇(最小1)|×|
|事前ウォーミングされたインスタンス|×|〇(既定1)|×|
|アプリごとの最大値|×|〇|×|

### 自動スケーリング
自動スケーリングを有効にするメリットは、メトリックに関する自動スケーリングのルールを設定する必要がないことにあります。`Azure`ポータルの画面で、`Web App`を選択してから「スケールアウト」選びます。表示された画面から「Automatic」の項目を選択した後、`App Service Plan`インスタンスの最大数として「Maximum burst」を選びます。`Web App`インスタンスの最小値を指定したい場合は、「Always ready instances」で数字を指定し、`Web App`インスタンスの最大値を指定したい場合は、「Enforce scale out limit」を選択し、「Maximum scale limit」で数字を指定します。

:::note info
最大バーストとは、App Service Planで増やすことができるインスタンスの最大数です。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/7f659279-c91f-b37b-fc7b-5b83d7d7039d.png)

:::note warn
自動スケーリングを有効にするには、`App Service Plan`を`Premium v2`か`Premium v3`プランである必要があります。それ以外の場合は、下図のように「Automatic」の項目がグレーアウトされて選択できないようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/009f87f1-7d86-77ac-1850-908556827669.png)
:::

https://learn.microsoft.com/ja-jp/azure/app-service/manage-automatic-scaling?tabs=azure-portal

### スケーリングルールによる自動スケーリング
スケジューリングルールは、スケジュールとリソースに関するルールを定義することができ、このルールに基づいて自動スケーリングを行います。設定するには、`Azure`ポータルで`Web App`の「スケールアウト」を選択した後表示された画面で、「Rules Based」を押すと表示される「Manage rules based scalinlg」のリンクを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/d3b5ba3d-59aa-884a-4a2a-29ca8875d569.png)

「カスタム自動スケーリング」を選択します。するとカスタム自動スケーリングの欄が表示されるので、自動作成された既定のスケジュール条件を変更していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/0050d373-a82f-9b51-27bc-93b40f9a1099.png)

「メトリックに基づいてスケーリングする」を選択し、「規則を追加する」のリンクを押下します。するとスケールルールが表示されるので、表示された画面でルールの定義ができます。インスタンスの制限では、インスタンスの最大値を増やしたい場合は「最大値」を変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/d5221b6f-f9cf-2b08-094d-69242eb2014a.png)

スケールルールでは、メトリック名は「CPU Percentage」の他にも「Memory Percentage」などがあります。画像ではスケール操作をトリガーするメトリックのしきい値を「70」としているので、10分間の平均`CPU`使用率が`70%`を超えたときに、`Web App`のインスタンス数を1つ増やすというルールになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/5754c2f4-c72c-f1bb-30bd-50d6f1b82327.png)

:::note info
よく使われるメトリックは、「CPU Percentage」と「Memory Percentage」になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/6de11ec6-873a-8460-4488-cb89cecf2e33.png)
:::

:::note info
時間グレインの統計として、平均以外にも様々な統計量を選択することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/7f58b396-b91a-05ac-a51e-e061efe3cc26.png)
:::

https://learn.microsoft.com/ja-jp/azure/azure-monitor/autoscale/autoscale-get-started?toc=%2Fazure%2Fapp-service%2Ftoc.json

## デプロイスロットのスワッピング
デプロイスロットを利用すると、運用スロットと検証スロットのスワップを行うことができます。スワップを行うことで、本番環境のダウンタイムが短くなるのと、バグが含まれていた場合のロールバックが容易になります。また、スロットごとの振り分け率を決め、トラフィックを振り分けるカナリアテスト(`A/B`テスト)も可能です。

設定するには`Azure`ポータル画面で、「デプロイスロット」を選択し、表示された画面で「＋スロットの追加」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/b8f260a7-75d0-0e71-d19b-d6ee03e0e686.png)

表示される画面で、スロットの追加を行います。スロット名を入力したら「追加」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/fb705936-6dc7-332a-0259-490c519fd075.png)

新しいデプロイスロットが追加されたことがわかりました。

:::note info
新しいデプロイスロットには内容がありません。スロットには`Git`を使って、異なるブランチ、リポジトリからデプロイが可能です。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/af5769f0-ab22-7fe7-1a1c-6cb215eed40b.png)

これらのスロットを入れ替えるためには、「スワップ」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/3c2601fb-3b4c-5b46-61cd-a45c927d4bc9.png)

ソースのスロットと、ターゲットのスロットを指定し、「スワップ」を押すことで、スロットの入れ替えができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/e67cd65d-7ae0-7349-cb9e-3cb474c1b493.png)

https://learn.microsoft.com/ja-jp/azure/app-service/deploy-staging-slots?tabs=portal

:::note warn
スワッピングにより、一般設定、アプリ設定、接続文字列、の情報はスワップされますが、発行エンドポイント、カスタムドメイン名、`IP`制限、仮想ネットワーク、などはスワップされません。
:::

## 仮想ネットワークでの占有利用
`ASE(Azure App Service)`は、他のユーザーとユニットを共有するマルチテナント型サービスになりますが、`App Service Environment`を使うことで、ユーザーの仮想ネットワーク内に直接`App Service`をデプロイすることができ、シングルテナント型サービスとして利用することも可能です。

ASEを使うには、「価格プラン」を「Isolated V2」に選択します。地域はグレーアウトされますが、後ほどのネットワークタブの項目で、デプロイ先の仮想ネットワークとサブネットを指定することになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/a584aed0-f055-d163-955c-cf3b8c5a7be3.png)

ASEの作成では、ネットワークタブで以下のように「仮想ネットワーク」と「サブネット」の指定が必要になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/a2af6019-d2c3-9204-0cb3-a06b07e8c7b3.png)

:::note info
「価格プラン」を「Premium」以下にした場合、`ASE`を使用することができず必然的にマルチテナント型サービスになります。そのため`ASE`作成時には選択不要だった「地域」の選択が必須となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/51b59248-b50d-f4ca-0e31-98105df256a5.png)

ネットワークタブでは、`ASE`の作成時に表示されていた「仮想ネットワーク」や「サブネット」の指定項目はありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/505b7b12-f97c-4446-c5bb-2fbcc46bedac.png)
:::

https://learn.microsoft.com/ja-jp/azure/app-service/environment/using

## App Service Planごとの料金体系
契約した`App Service Plan`の中で、いくつ`Web App`や`Functions`をデプロイしたとしても、`Azure`のコストは変わりません。つまり、複数サイトを同居させることでコストメリットの高いサービス運用が可能になります。

:::note info
`App Service Plan`とは、`CPU`やメモリーなどのアプリを動かす`VM`サーバー群のスペックを決める枠組みになります。
:::

https://learn.microsoft.com/ja-jp/azure/app-service/overview-hosting-plans#how-much-does-my-app-service-plan-cost

## 補助的なバックグラウンドジョブの実行
補助的なバックグラウンドジョブを実行するための機能として、`WebJobs`があります。`WebJobs`により、プログラムやスクリプトを実行することができます。`WebJobs`には、継続的`WebJob`と、トリガーされる`WebJob`があります。

`Azure`ポータルで設定するには、「Webジョブ」を押し、表示された画面で「＋追加」を選択します。すると`Web`ジョブの追加が表示されるので、ジョブ名、実行するジョブファイルのアップロード、ジョブの種類、スケーリング有無について選択した後、最後に「Webジョブの作成」を押すと`Web`ジョブが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/f03e434a-5c5f-d3b4-6138-e3868419d310.png)

https://learn.microsoft.com/ja-jp/azure/app-service/webjobs-create

:::note warn
`WebJobs`は`App Service on Linux`ではまだサポートされていません。
:::

## VNet統合
`Web App`では、`VNet`統合を利用することで、簡単に`Vnet`内の`Azure`リソースにアクセスすることができます。

`Azure`ポータルで設定するには、「ネットワーク」を押した後に表示される画面で、送信トラフィックの「VNET統合」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/ba958d73-8f45-8b84-1fa8-e1ac06edca92.png)

「仮想ネットワーク統合の追加」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/37e5cdad-870d-55ce-24e7-505ecda436ea.png)

仮想ネットワーク統合の追加画面が表示されるので、統合するサブスクリプション、仮想ネットワーク、サブネットを選択し、「接続」を押せば`VNet`統合完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/404907c7-b3b5-5ccd-5d53-900cbcde32eb.png)

https://learn.microsoft.com/ja-jp/azure/app-service/configure-vnet-integration-enable

## カスタムドメイン
カスタムドメインの設定は、`Web App`の標準機能として提供されています。

`Azure`ポータル画面でカスタムドメインを設定するには、「カスタムドメイン」を選択します。表示される画面で「＋カスタムドメインの追加」を押し、「ドメインプロバイダー」「TLSまたはSSL証明書」「TLS/SSLの種類」「App Serviceドメイン」の項目を選択して「検証」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/085f86d5-fd03-52dc-6d6c-8fcc1e1c3c71.png)

:::note warn
カスタムドメインを設定するには、`App Service Plan`が`Free(F1)`ではなく、有料レベルであることが必要です。
:::

:::note info
カスタムドメインは`Azure`上で購入可能です。カスタムドメインの購入をするには「＋App Serviceドメインの購入」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/a2f04ab6-b0ad-4d56-ec57-4db30afbfe9a.png)

`App Service`ドメインの作成画面が表示されるので、そこで「リソースグループ」と「ドメイン」を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/ee6769fb-69e2-212e-e95f-93668195b243.png)

ドメインの購入には、氏名や電話番号などの連絡先情報の登録が必要になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/a0694ff7-0091-c6a5-06f3-0f015f057630.png)

必要な情報を指定したら「確認および作成」ボタンを押すことで、指定したドメインが利用可能になります。
:::

https://learn.microsoft.com/ja-jp/azure/app-service/app-service-web-tutorial-custom-domain?tabs=root%2Cazurecli

## SSL証明書
`SSL`証明書のバインドも、`Web App`の標準機能として提供されています。

`Azure`ポータル上で、無料のマネージド証明書を作成＆バインドする設定をしていくには、まず「証明書」を押し、表示された画面で「＋証明書の追加」を選択します。すると`App Service`マネージド証明書の追加画面が表示されるので、所有しているカスタムドメインを選択し、「検証」ボタンを押して検証したのち、「追加」ボタンを押すことで無料のマネージド証明書を作成することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/05ea6838-c2c8-b9aa-5cf0-71901d1634b6.png)

:::note info
`App Service`のカスタムドメインを保護するだけなら、無料のプライベート証明書で十分です。
:::

https://learn.microsoft.com/ja-jp/azure/app-service/configure-ssl-certificate?tabs=apex

## CMS
`Web App`では、`Wordpress`、`Drupal`、といった`CMS`(コンテンツマネジメントシステム)を簡単にデプロイすることができます。

ここでは`Web App`上で動く`Wordpress`を作成します。`Azure`ポータル画面の検索ポータルで「wordpress」と入力し、`Marketplace`の「WordPress on App Service」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/4ac336fd-4fc0-b496-e549-edd5363fa264.png)

`App Service`で`Wordpres`を作成する画面が表示されますので、必要項目を全て入力してから「確認および作成」ボタンを押すと`Wordpress`が作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/6f2a182a-40a0-54e7-f023-300df403287e.png)

https://learn.microsoft.com/ja-jp/azure/app-service/quickstart-wordpress

## ハイブリッド接続
ハイブリッド接続によって、アプリから`TCP`エンドポイントへのアクセスができるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/f3b2429e-9051-c57d-885e-3a0384d8e52f.png)

`Azure`ポータルで設定するには、「ネットワーク」を押して表示された画面で、送信トラフィックの「ハイブリッド接続」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/c94f6f74-0dd6-7ece-f3e7-564ef68c2a3e.png)

「＋ハイブリッド接続の追加」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/59a937b4-73b6-d76a-b026-846813fb6401.png)

「ハイブリッド接続の新規作成」を押すと、ハイブリッド接続の新規作成画面が、画面右側に表示されるので、必要情報を入力してから「OK」ボタンを押すとハイブリッド接続ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2452857/4cbb302e-96a2-2212-a719-1e00576d433f.png)

https://learn.microsoft.com/ja-jp/azure/app-service/app-service-hybrid-connections

# おわりに
本記事では、`Web App`の主な機能と`Azure`ポータルでの設定方法をまとめました。今までは`Web App`を使った`Web`アプリ開発をしたことがなく、`VM`上で`Web`サーバーのソフトウェアをインストールしておりましたが、`Web App`には`Web`サーバーとして運用するために便利な機能が豊富にあり、簡単に利用することができること知ってとても驚きました。`Web App`を上手に利用することで、`VM`上にサーバーを用意する方法と比較して開発運用コストを大幅に削減できることができるため、今後`Web`アプリを作るときは、次は必ず`Web App`を使おうと思いました。