3
2

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 1 year has passed since last update.

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

Posted at

はじめに

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

Web Appの特徴

OSとランタイムの管理が不要

Web Appでは、WindowsLinuxContainer、の3種類のアプリケーションと、.NETNode.jsJavaPHPPythonRubyGo、のランタイムが選択できます。選択したランタイムは、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 ×

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

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

image.png

継続的インテグレーション

Web Appでは、Azure DevOpsGitHubBitbucketによるCI/CD環境の構築が簡単にできます。

Web Appは手動によるデプロイにも対応しており、GitAzure CLIFTP、によるデプロイが可能です。

Azureポータルで継続的インテグレーションを設定するには、「デプロイセンター」をクリックし、「ソース」から使用するプロバイダーを選択してください。下図はGitHubをソースとして選んだ場合の図であり、選択した組織、リポジトリ、ブランチ、を選択して設定ができます。
image.png

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

image.png

Easy Authによる簡単な認証機能の利用

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

image.png

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

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

image.png

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

image.png

「OAuth Apps」を押します。

image.png

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

image.png

Application nameHomepage URLAuthorization callback URLを入力して、「Register application」を押します。

image.png

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

image.png

今回の場合のHomepage URLAuthorization callback URLは以下のようになります。

  • Homepage URLhttps://sample-web-app-20231029.azurewebsites.net
  • Authorization callback URLhttps://sample-web-app-20231029.azurewebsites.net/.auth/login/github/callback

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

柔軟なスケーラビリティ

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

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

以下の表に、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」で数字を指定します。

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

image.png

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

image.png

スケーリングルールによる自動スケーリング

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

デプロイスロットのスワッピング

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

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

image.png

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

image.png

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

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

image.png

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

image.png

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

image.png

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

仮想ネットワークでの占有利用

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

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

image.png

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

image.png

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

image.png

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

image.png

App Service Planごとの料金体系

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

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

補助的なバックグラウンドジョブの実行

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

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

image.png

WebJobsApp Service on Linuxではまだサポートされていません。

VNet統合

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

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

image.png

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

image.png

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

image.png

カスタムドメイン

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

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

image.png

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

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

image.png

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

image.png

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

image.png

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

SSL証明書

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

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

image.png

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

CMS

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

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

image.png

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

image.png

ハイブリッド接続

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

image.png

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

image.png

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

image.png

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

image.png

おわりに

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

3
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?