Azureを触り始めた現場エンジニアからよく聞かれる質問です。VMを選べばOSから自由に構成できますが、OSのパッチ当て・ミドルウェアの更新・Webサーバーの設定など、アプリ本体とは関係ない管理作業が次々と積み重なります。
この記事では、Azure App ServiceでLinux Webアプリを公開する手順を、VM運用との違いを軸に解説します。azure app service linux 環境でのアプリ作成(az コマンド)、デプロイ(ZIP deploy・GitHub Actions)、スケール設定、コスト比較まで一通りカバーします。
この記事のポイント
・App ServiceはOS管理不要でLinux Webアプリを公開できる
・az webapp createコマンドで数分以内にアプリが起動する
・GitHub ActionsでCI/CDパイプラインを即座に構成できる
・VM比でインフラ管理工数を大幅に削減できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Azure App Serviceとはどんなサービスか
Azure App Service は、MicrosoftのクラウドプラットフォームAzureが提供するPaaS(Platform as a Service)型のWebアプリケーションホスティングサービスです。クラウドの責任分担モデルでは、IaaS・PaaS・SaaSに大きく分かれます。
・IaaS(Infrastructure as a Service):Azure VMのようにOSから自分で管理する
・PaaS(Platform as a Service):OSとランタイム環境はクラウド側が管理し、アプリコードだけをデプロイする
・SaaS(Software as a Service):Microsoft 365のようにアプリ自体を利用する
App Service はPaaSに位置するため、LinuxのOSパッチ・Webサーバー設定はAzureが自動管理します。エンジニアはアプリのコードとランタイム選択だけに集中できます。
App Service は「App Service プラン」と呼ばれるホスティング基盤の上で動作します。プランのSKU(価格帯)によってCPU・メモリ・スケール機能が決まります。
・F1(Free):月60分のCPUタイム制限あり。動作確認専用
・B1(Basic):1コア/1.75GB。本番の最低ライン
・S1(Standard):B1相当スペックにスケールアウト・SSL・カスタムドメインが追加
・P1v3(Premium v3):2コア/8GB。高トラフィック本番環境向け
Linux Webアプリを作成する場合、App Service プランの作成時に
--is-linux フラグを付けます。対応ランタイムは Python、Node.js、PHP、Ruby、Java、.NET など幅広く用意されています。VMで運用する場合との違い
同じ「LinuxでWebアプリを動かす」でも、Azure VM(IaaS)とApp Service(PaaS)では運用の責任範囲が根本的に異なります。| 比較項目 | Azure VM(IaaS) | App Service(PaaS) |
|---|---|---|
| OSパッチ管理 | 自分で実施 | Azure側が自動管理 |
| Webサーバー設定 | Apache/Nginxを自分で構成 | 不要(内蔵リバースプロキシ) |
| ランタイム更新 | 手動でPython等を更新 | プラン設定で切り替え可能 |
| スケール | VMサイズ変更・手動追加 | コマンド1行・自動スケール対応 |
| SSHアクセス | OSへ直接ログイン可 | 制限付き(Kudu/SSH経由) |
| SSL証明書 | Let's Encrypt等で手動設定 | 管理証明書を無料で自動更新 |
| カスタムOSソフト | 自由にインストール可 | コンテナ化が必要な場合あり |
| 最低コスト目安 | B1s VM ~ 約1,500円/月 | B1プラン ~ 約2,500円/月 |
App Serviceを選ぶべきケース
・標準的なWebアプリ・REST APIで、OS直接操作が不要な場合・GitHub Actionsと連携してCI/CDパイプラインを短期間で構築したい場合
・SSL証明書やスケール設定をマネージドで済ませたい場合
VMを選ぶべきケース
・カスタムのカーネルモジュールやOSレベルのソフトウェアが必要な場合・固定パブリックIPや詳細なネットワーク設計が必要な場合
・自前のApache/Nginxを詳細にコントロールしたい場合(参考:httpd の基本操作)
Azure App ServiceでLinux Webアプリを作成する
実行環境:Azure CLI 2.x 以上インストール済み・Azureサブスクリプション取得済み。以下の手順はUbuntu 24.04 LTSおよびAzure Cloud Shellで動作確認しています。Azure App Serviceの詳しいハンズオン演習は https://azure.linuxmaster.jp/ でも提供しています。
1. リソースグループの作成
Azureリソースをまとめるリソースグループを作成します。# create resource group in Japan East region az group create --name rg-appservice-demo --location japaneast
{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-appservice-demo", "location": "japaneast", "name": "rg-appservice-demo", "properties": { "provisioningState": "Succeeded" } }
2. App Service プランの作成(Linuxプラン)
Linux用のApp Service プランを作成します。--is-linux を省略するとWindowsプランになるため注意してください。# create app service plan for linux (B1 SKU) az appservice plan create --name asp-demo --resource-group rg-appservice-demo --sku B1 --is-linux --location japaneast
3. Linux Webアプリの作成
App Service プラン上にWebアプリを作成します。--name で指定する名前はAzure全体でグローバルに一意なURLになるため、ランダムな文字列や日付を付与するのが一般的です。# create linux web app with Python 3.11 runtime az webapp create --resource-group rg-appservice-demo --plan asp-demo --name mylinuxwebapp-20260717 --runtime "PYTHON:3.11"
https://mylinuxwebapp-20260717.azurewebsites.net 形式になります。ブラウザでアクセスして「Your web app is running and waiting for your content」のデフォルトページが表示されれば成功です。ログをリアルタイムで確認したい場合は以下のコマンドが便利です。
# tail app logs in real time az webapp log tail --resource-group rg-appservice-demo --name mylinuxwebapp-20260717
アプリのデプロイ方法(ZIP deploy / GitHub Actions)
App Service へのデプロイ手段は複数あります。ここでは開発中に素早く確認するためのZIP deployと、本番CI/CDに使うGitHub Actionsの2つを紹介します。1. ZIP deployの手順
ローカルで開発中のPythonアプリをすぐに確認したい場合に便利な方法です。# zip app directory (exclude .pyc and cache files) cd /path/to/myapp zip -r app.zip . -x "*.pyc" -x "__pycache__/*" -x ".git/*" # deploy zip package to App Service az webapp deployment source config-zip --resource-group rg-appservice-demo --name mylinuxwebapp-20260717 --src app.zip
2. GitHub ActionsによるCI/CDパイプライン
本番運用では、mainブランチへのpushをトリガーに自動デプロイするCI/CDパイプラインを組むのが定石です。まず、Azureポータルまたは以下のコマンドでPublish Profileを取得し、GitHubリポジトリのSecretsに
AZURE_WEBAPP_PUBLISH_PROFILE として登録します。# get publish profile and save to file az webapp deployment list-publishing-profiles --resource-group rg-appservice-demo --name mylinuxwebapp-20260717 --xml --output tsv > publish_profile.xml
.github/workflows/deploy.yml を以下の内容で作成します。name: Deploy to Azure App Service on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install -r requirements.txt - name: Deploy to Azure Web App uses: azure/webapps-deploy@v3 with: app-name: 'mylinuxwebapp-20260717' publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} package: '.'
スケールアウト・スケールアップの設定
App Service のスケール変更はazコマンドで完結します。VMのようにOSを再構築する必要はありません。スケールアップ(SKUを上位に変更する)
処理能力そのものを上げたい場合はApp Service プランのSKUを変更します。変更中もアプリはほぼ無停止で継続稼働します。# scale up: change SKU from B1 to S1 az appservice plan update --name asp-demo --resource-group rg-appservice-demo --sku S1
スケールアウト(インスタンス数の増減)
Standardプラン以上ではインスタンス数を増やしてトラフィックを分散できます。Azureポータルの「スケールアウト(App Service プラン)」ブレードから手動設定するか、以下のようにaz monitor autoscaleコマンドでCPU使用率に連動した自動スケールルールを定義できます。# create autoscale setting (min 1, max 5 instances) az monitor autoscale create --resource-group rg-appservice-demo --resource asp-demo --resource-type Microsoft.Web/serverfarms --name autoscale-asp-demo --min-count 1 --max-count 5 --count 2 # add scale-out rule: add 1 instance when CPU > 70% for 5 minutes az monitor autoscale rule create --resource-group rg-appservice-demo --autoscale-name autoscale-asp-demo --condition "Percentage CPU > 70 avg 5m" --scale out 1
コストとVM運用コストの比較
コストは「プランの料金」だけで比較してはいけません。VM運用では管理工数(エンジニアの時間コスト)が上乗せされます。| 項目 | Azure VM B1s(1コア/1GB) | App Service B1(1コア/1.75GB) |
|---|---|---|
| 月額コスト目安 | 約1,500円 | 約2,500円 |
| OSパッチ管理工数 | 月1~2時間 | 0時間(Azure管理) |
| Webサーバー初期設定工数 | 初回2~4時間 | 0時間(不要) |
| SSL証明書設定 | Let's Encrypt等で手動設定 | 管理証明書を無料で自動更新 |
| スケール対応 | VMサイズ変更・再起動が必要 | コマンド1行で無停止変更 |
よくあるエラーと対処法
App Service でLinux Webアプリを公開する際に現場でよく遭遇するエラーを2つ紹介します。「Application Error」でアプリが起動しない場合
アプリが起動直後にエラーページになる場合、まずログを確認します。# check application logs for startup errors az webapp log tail --resource-group rg-appservice-demo --name mylinuxwebapp-20260717
startup.txt または gunicorn を探します。明示的に指定するには以下のように設定します。# set startup command for Python web app (gunicorn example) az webapp config set --resource-group rg-appservice-demo --name mylinuxwebapp-20260717 --startup-file "gunicorn --bind=0.0.0.0 --timeout 600 app:app"
デプロイ後にコードが反映されない場合
ZIP deployでコードを更新してもブラウザに古いバージョンが表示される場合は、アプリを再起動してキャッシュをクリアします。# restart app to force new deployment to take effect az webapp restart --resource-group rg-appservice-demo --name mylinuxwebapp-20260717
まとめ
azure app service linux を使えば、OSやWebサーバーの管理をAzureに委ねて、アプリのコードに集中した開発・運用が実現できます。標準的なWebアプリやAPIサーバーであれば、VM運用と比較して立ち上げのスピードと運用コストの両面で優位性があります。本記事の操作まとめ:
| やりたいこと | コマンド |
|---|---|
| リソースグループ作成 | az group create --name rg-demo --location japaneast |
| Linuxプラン作成 | az appservice plan create --sku B1 --is-linux |
| Linux Webアプリ作成 | az webapp create --runtime "PYTHON:3.11" |
| ZIPデプロイ実行 | az webapp deployment source config-zip --src app.zip |
| スケールアップ | az appservice plan update --sku S1 |
| ログのリアルタイム確認 | az webapp log tail --name mywebapp |
| アプリ再起動 | az webapp restart --name mywebapp |
Azure App Serviceの実践スキルも、Linuxサーバー構築の「型」から体系的に理解できます
az webapp create でアプリを起動できても、「なぜこの構成にするか」を説明できるかどうかで現場での信頼が変わります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Azureハンズオン学習コースでは実機を使った演習で即戦力スキルを習得できます。
「Linuxの基礎から体系的に学びたい」という方には、『Linuxサーバー構築入門マニュアル(図解60P)』を無料でプレゼントしています。こちらから無料ダウンロード。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:Azure Monitorのメトリクスとアラート設定|Linux VMのCPU・ディスク監視と通知ルールの実践
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます