クイック スタート: Python (Django、Flask、または FastAPI) Web アプリを Azure App Service にデプロイする

このクイックスタートでは、Python Web アプリ (Django、Flask、または FastAPI) を Azure App Service にデプロイします。 Azure App Service は、Linux サーバー環境でホストされている Python アプリをサポートするフル マネージドの Web ホスティング サービスです。

このクイック スタートを完了するには、次のものが必要です。

注

この記事には、Azure App Service を使用した Python Web アプリのデプロイに関する最新の手順が含まれています。 Windows 上の Python はサポートされなくなりました。

最後までスキップする

このチュートリアルでは、Azure Developer CLI を使用してサンプル アプリをすばやくデプロイし、Azure で実行されているのを確認できます。 Azure Cloud Shellで次のコマンドを実行し、プロンプトに従います。

mkdir flask-quickstart
cd flask-quickstart
azd init --template https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
azd up

また、リソースを削除するには、次のようにします。

azd down

サンプル アプリケーション

このクイックスタートは、Flask、Django、または FastAPI を使用して行うことができます。 このクイックスタートを進めるのに役立つように、各フレームワークのサンプル アプリケーションが用意されています。 サンプル アプリケーションをダウンロードするか、ローカル ワークステーションに複製します。

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

ローカルでアプリケーションを実行するには:

  1. アプリケーション フォルダーに移動します。

    cd msdocs-python-flask-webapp-quickstart
    
  2. アプリ用の仮想環境を作成します。

    py -m venv .venv
    .venv\scripts\activate
    
  3. 依存関係をインストールする:

    pip install -r requirements.txt
    
  4. アプリを実行します。

    flask run
    
  5. Web ブラウザーで http://localhost:5000 のサンプル アプリケーションを参照します。

    ブラウザーでローカルで実行されている Flask アプリのスクリーンショット

問題がありますか。 お知らせください。

Azure で Web アプリを作成する

Azure でアプリケーションをホストするには、Azure で Azure App Service Web アプリを作成する必要があります。 Web アプリは、Azure CLI、 VS Code、 Azure Tools 拡張機能パック、または Azure portal を使用して作成できます。

Azure CLI コマンドは、 Azure CLI がインストールされているコンピューターで実行できます。

Azureリソースを作成し、その後、別々のAzure CLIコマンドを使ってアプリケーションをデプロイしてください。

必要に応じて、az login を使用して Azure に ログインします。

az login

<app-name>をグローバルに一意の名前に置き換えてください。 リソースグループとApp Serviceプランを作成し、その後 az webapp create を使ってウェブアプリを作成します。

az group create --name myResourceGroup --location eastus
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku P0v3 --is-linux
az webapp create --name <app-name> --resource-group myResourceGroup --plan myAppServicePlan --runtime "PYTHON:3.14"
az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
  • --runtimeパラメータを使って、アプリが動作するPython のバージョンを指定してください。 この例はPython 3.14を使用しています。 サポートされるPythonランタイムを一覧表示するには、az webapp list-runtimes --os-type linux --runtime python --output tableをご利用ください。
  • --skuパラメータを使ってApp Serviceプランのサイズ(CPUとメモリ)とコストを定義します。 この例はP0v3(Premium v3)サービスプランを使用しており、Azureのサブスクリプションにコストがかかります。 App Service プランの完全な一覧については、「 App Service の価格」を参照してください。
  • eastusを希望する地域に置き換えてください。 利用可能な地域をリストアップするには、az account list-locations を付けて --output table を実行してください。
  • SCM_DO_BUILD_DURING_DEPLOYMENT設定は、ソースアーカイブをデプロイする際に requirements.txt の依存関係のインストールを含む Oryx ビルドを有効にします。

requirements.txt などのアプリケーション ファイルを備えた ZIP ファイルを、アーカイブのルートに作成します。 .venv、.git、.envなどのローカルファイルは除外します。 プラットフォーム固有の手順については、「ZIP ファイルを使用してデプロイ」タブの「アプリケーションの ZIP ファイルを作成する」をご覧ください。その後、az webapp deploy を使ってアーカイブをデプロイします:

az webapp deploy --name <app-name> --resource-group myResourceGroup --src-path <zip-file-path> --type zip

展開には数分かかることもあります。 アプリを表示するには、https://<app-name>.azurewebsites.net を参照します。 ログをストリーミングするには、 az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystemを実行して有効にし、その後 az webapp log tail --name <app-name> --resource-group myResourceGroupを実行します。

問題がありますか。 お知らせください。

アプリケーション コードを Azure にデプロイする

Azure App Service では、GitHub Actions やすべての主要な CI/CD ツールなど、アプリケーション コードを Azure にデプロイするための複数の方法がサポートされています。 この記事では、ローカル ワークステーションから Azure にコードをデプロイする方法について説明します。

前のステップで使ったAzure CLIコマンドでリソースを作成し、アプリケーションを展開しました。 次のステップに進めます。


問題がありますか。 トラブルシューティング ガイドを最初に参照してください。 それでも問題が解決しない場合は、 お知らせください。

スタートアップ スクリプトを構成する

App Service は、デプロイ内の特定のファイルの存在に基づいて、アプリが Django または Flask アプリのどちらであるかを自動的に検出し、アプリを実行するための既定の手順を実行します。 FastAPIのような他のウェブフレームワークをベースにしたアプリの場合、App Serviceのスタートアップスクリプトを設定してアプリを動かす必要があるかもしれません。 それ以外の場合、App Serviceは opt/defaultsite フォルダ内のデフォルトの読み取り専用アプリを実行します。

  • Python 3.14以降:App ServiceはFastAPIアプリを自動的に検出し実行します。 起動コマンドは不要です。
  • Python 3.13以前:カスタム起動コマンドを設定する必要があります。

App Service で Python アプリを実行する方法と、アプリで動作を構成およびカスタマイズする方法の詳細については、「 Azure App Service 用の Linux Python アプリを構成する」を参照してください。

App Service は Flask アプリの存在を自動的に検出します。 このクイックスタートに追加の構成は必要ありません。

アプリの参照

Web ブラウザーでデプロイされたアプリケーションを参照します。 Azure portal からリンクをフォローできます。 [概要] ページに移動し、[既定のドメイン] を選択します。 既定のアプリ ページが表示された場合は、しばらく待ってからブラウザーを更新してください。

Python サンプル コードによって、App Service 内で、組み込みのイメージを使用して、Linux コンテナーが実行されています。

Azure で実行されているアプリのスクリーンショット

お疲れさまでした。 App Service に Python アプリをデプロイすることができました。

問題がありますか。 トラブルシューティング ガイドを最初に参照してください。 それでも問題が解決しない場合は、 お知らせください。

ログのストリーミング

Azure App Service では、コンソールに出力されたすべてのメッセージをキャプチャして、アプリケーションの問題を診断するのに役立てることができます。 サンプル アプリには、この機能を示す print() ステートメントが含まれます。

@app.route('/')
def index():
   print('Request for index page received')
   return render_template('index.html')

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

@app.route('/hello', methods=['POST'])
def hello():
   name = request.form.get('name')

   if name:
       print('Request for hello page received with name=%s' % name)
       return render_template('hello.html', name = name)
   else:
       print('Request for hello page received with no name or blank name -- redirecting')
       return redirect(url_for('index'))

App Service 診断ログの内容は、Azure CLI、VS Code、または Azure portal を使用して確認できます。

まず、 az webapp log config コマンドを使用して、App Service ファイルシステムにログを出力するように Azure App Service を構成する必要があります。

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

ログをストリーミングするには、 az webapp log tail コマンドを使用します。

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

アプリのホームページを更新するか、他の要求を実行してログメッセージを生成します。 出力は次のようになります。

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

問題がありますか。 トラブルシューティング ガイドを最初に参照してください。 それでも問題が解決しない場合は、 お知らせください。

リソースをクリーンアップする

サンプル アプリを使い終わったら、Azure からアプリのすべてのリソースを削除できます。 リソース グループを削除すると、追加料金が発生しなくなります。また、Azure サブスクリプションを整理するのにも役立ちます。 リソース グループを削除して、リソース グループ内のすべてのリソースも削除することが、アプリのすべての Azure リソースを削除する最も簡単な方法です。

az group delete コマンドを使用してリソース グループを削除します。

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

--no-wait 引数を使用すると、操作が完了する前にコマンドから戻ることができます。

問題がありますか。 お知らせください。

次のステップ