Azure App Serviceに入門する
Azure App Service(以下、App Service)に入門したときのメモを残します。
学習に使用したもの
App Service の入門として、Microsoft Learn の以下のコンテンツを実施しました。当記事はこちらの学習コンテンツのメモ書き程度のものである点にご注意ください。
参考:AZ-204: Azure App Service Web Apps を実装する
Azure App Service とは
App Service は Azure のマネージドなインフラストラクチャで Web アプリケーションをホストすることができるサービスで、他クラウドの Google App Engine(GAE)、AWS Elastic Beanstalk に近いサービスです。
最小限のインフラ運用でアプリケーションを実行することができ、開発のみに集中できる点が売りのサービスです。
当記事では、App Service にホストしたアプリケーションを App Service アプリと呼びます。
App Service Plan
App Service Plan とは
App Service Plan(以下、Service Plan)は App Service アプリを実行するためのコンピューティングリソース構成を定義するためのリソースです。
App Service アプリは Service Plan で定義された構成の VM インスタンス上で実行されます。
Service Plan と App Service アプリは 1 : n の関係になっており、後述するデプロイスロットの数だけアプリをデプロイすることができます。各デプロイスロットのアプリケーションは、同一の VM インスタンスで実行されます。
Service Plan では、以下のような項目を定義します。
- OS(Linux / Windows)
- リージョン
- 価格レベル
- VM インスタンスの数
- VM インスタンスのサイズ
デプロイスロット
デプロイスロットは App Service アプリをデプロイできる単位であり、スロット 1つにつき 1つのアプリをデプロイすることができます。後述の価格レベルにより、利用できるデプロイスロットの数は異なります。
スロットごとに別々のアプリをデプロイすることができるほか、スロットをステージング用と本番用に分け、「スワップ」という操作を行うことで、本番環境アプリへのシームレスな移行を行うこともできます。
また、アプリの受信トラフィックを異なるスロットにルーティングすることができ、スロットごとのルーティングの割合を指定できます。これにより、アプリの新しいバージョンに対して一定割合のユーザーのみアクセスさせるといった運用が可能です。
価格レベル
App Service では Service Plan の価格レベル(pricing tier)により、アプリが利用できるコンピューティングリソースや各種機能の有無、料金などが決定します。
価格レベルは大きく以下の 3つに分類されます。
- 共有コンピューティング
- 専用コンピューティング
- Isolated
共有コンピューティング(Shared compute)
共有コンピューティングでは、無料で App Service アプリを実行できる代わりに、コンピューティングリソースが他のユーザーがデプロイしたアプリと共有され、インスタンスのスケーリングなどが提供されていません。
そのため、ユースケースは App Service をお試しで使ってみたい場合や、個人での開発に限られるかと思います。
専用コンピューティング(Dedicated compute)
専用コンピューティングでは、ユーザー専用の VM で App Service アプリを実行することができます。本番環境のアプリケーションでは、基本的にこの価格レベルを使用することになるかと思います。
Basic、Standard、Premium などのレベルがあり、以下の表のように、それぞれ利用できるコンピューティングリソース、最大インスタンス数、デプロイスロットなどの組み合わせが定義されています。
レベル | vCPU | Memory(GB) | 最大インスタンス数 | デプロイスロット |
---|---|---|---|---|
Basic B1 | 1 | 1.75 | 3 | 8 |
Basic B2 | 2 | 3.5 | 3 | 16 |
Basic B3 | 4 | 7 | 3 | 32 |
Standard S1 | 1 | 1.75 | 10 | 8 |
Standard S2 | 2 | 3.5 | 10 | 16 |
Standard S3 | 4 | 7 | 10 | 32 |
Premium v3 P0V3 | 1 | 4 | 30 | 8 |
Premium v3 P1V3 | 2 | 8 | 30 | 16 |
Premium v3 P2V3 | 4 | 16 | 30 | 32 |
Premium v3 P3V3 | 8 | 32 | 30 | 64 |
この表は利用できる価格レベルの一部抜粋であり、最大で Premium v3 P5mv3(32 vCPU、Memory 256 GB)が提供されています。
価格レベルの一覧については App Service の料金ページを参照してください。
Isolated
Isolated では、App Service アプリを実行する VM が専用の Azure Virtual Network に配置されます。閉じたネットワーク内で App Service アプリを実行する必要がある場合に利用する価格レベルとなります。
各種仕様
利用できる言語
App Service では使用できる言語に制限があります。2023年12月現在、以下の言語がサポートされています。
- .NET
- .NET Core
- Java
- Node.js
- PHP
- Python
また、カスタムコンテナを使用することで、任意の言語ランタイムで構成した Docker イメージをデプロイすることもできます。
スケーリング
垂直スケーリング
App Service プランの価格レベルを変更することで垂直レベルのスケーリング(スケールアップ/スケールダウン)を行うことができます。コンピューティングリソースや最大インスタンス数、デプロイスロットを増やしたい場合などに利用します。
垂直スケーリングは数秒で適用されますが、その間にアプリのダウンタイムが発生する可能性があります。
水平スケーリング
水平レベルのスケーリング(スケールアウト/スケールイン)は自動で行うように設定することができます。
インスタンスの最小数は 1、最大数は価格レベルにより異なります。
メトリックに基づくスケーリングとスケジュールに基づくスケーリングを設定することができます。スケーリング条件は複数組み合わせることもでき、1日の特定の時間帯のみメトリックベースのスケーリングを行うといった複雑な設定も可能です。
メトリックベースのスケーリングでは、以下のようなメトリックを使用することができます。
- CPU 使用率
- メモリ使用率
- ディスクキューの長さ
- HTTP キューの長さ
- 受信バイト数
- 送信バイト数
また、他の Azure サービスのメトリックに基づくスケーリングも設定可能です(例:Azure Service Bus キューに保持されているアイテム数)。
ネットワーク
受信トラフィック
デフォルトでは、App Service アプリごとに生成されるエンドポイント、もしくはカスタムドメインを使用することで、インターネットからアプリにアクセスすることができます。
受信トラフィックについては、組み込みのファイアウォール機能で IP アドレスベースのアクセス制限を行うことができます。
また。サービスエンドポイントを使用すると、トラフィック送信元を特定のサブネットに制限することも可能です。
送信トラフィック
App Service は、インスタンスの数に関係なく、複数の送信用 IP アドレスを持っており、トラフィック送信時にいずれかの IP アドレスがランダム使用されます。そのため、App Service からトラフィックを受信するサービスは、すべての IP アドレスに対してファイアウォールを開放しておく必要があります。
送信用 IP アドレスは、アプリの再作成やプランのレベルを変更(Standard から Premium など)した場合などに変更される点に注意する必要があります。
App Service からの送信トラフィックを制限するには Azure Firewall を使用します。
参考:Azure App Service における受信 IP アドレスと送信 IP アドレス
参考:Azure Firewall を使用して送信トラフィックを制御する
デプロイ
App Service アプリのデプロイは手動でのデプロイのほか、Azure DevOps Services による自動デプロイ、GitHub や Bitbucket と連携した自動デプロイが可能となっています。
組み込みの認証
App Service アプリのエンドユーザー認証として、以下の ID プロバイダを使用した組み込みの認証がサポートされています。
- Microsoft ID プラットフォーム
- GitHub
- Apple
- OpenID Connect プロバイダ
参考:Azure App Service および Azure Functions での認証と承認
App Service の料金
App Service は従量課金制であり、主に Service Plan の価格レベルにより料金が変動します。具体的な料金については、以下のドキュメントから最新の情報が確認できます。
Discussion