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

Note

2024 年 6 月 1 日より、新しく作成されたすべての App Service アプリには、名前付け規則 <app-name>-<random-hash>.<region>.azurewebsites.net を使用して一意の既定のホスト名を生成するオプションが備わります。 既存のアプリ名は変更されません。

例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

詳しくは、App Service リソースの一意の既定のホスト名に関する記事をご覧ください。

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

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

注意

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

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

このクイックスタートは、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 CodeAzure Tools 拡張機能パック、または Azure portal を使用して作成できます。

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

Azure CLI の az webapp up コマンドにより、必要なリソースを作成し、1 つの手順でアプリケーションをデプロイできます。

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

az login

Webapp とその他のリソースを作成し、az webapp up を使用してコードを Azure にデプロイします。

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • --runtime パラメーターでは、アプリで実行される Python のバージョンを指定します。 この例では Python 3.9 を使用します。 使用可能なすべてのランタイムを一覧表示するには、az webapp list-runtimes --os linux --output table のコマンドを使用します。
  • --skuパラメータは、App Service プランのサイズ(CPU、メモリ)とコストを定義します。 この例では、B1 (Basic) サービス プランを使用します。これにより、Azure サブスクリプションにわずかなコストが発生します。 App Service プラン一覧は、[App Serviceの価格]のページをご覧ください。
  • --logs フラグは、webapp を起動した直後にログストリームを表示できるようにするための既定のログ記録を構成します。
  • 必要に応じて、引数 --name <app-name> を使用して名前を指定することもできます。 指定しない場合、名前は自動的に生成されます。
  • 必要に応じて、引数 --location <location-name> を含めることができます。ここで、<location_name> は利用可能な Azure リージョンです。 az appservice list-locations コマンドを実行すると、お使いの Azure アカウントで使用可能なリージョンの一覧を取得できます。

コマンドが完了するまでに数分かかる場合があります。 コマンドの実行中は、リソース グループ、App Service プラン、アプリ リソースの作成、ログの構成、ZIP デプロイの実行に関するメッセージが表示されます。 次に、"http://<app-name>.azurewebsites.net でアプリを起動することができます" という内容のメッセージが表示されます。これは、Azure 上のアプリの URL です。

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/cephas/myExpressApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
  "URL": "http://<app-name>.azurewebsites.net",
  "appserviceplan": "<app-service-plan-name>",
  "location": "centralus",
  "name": "<app-name>",
  "os": "<os-type>",
  "resourcegroup": "<group-name>",
  "runtime_version": "python|3.9",
  "runtime_version_detected": "0.0",
  "sku": "FREE",
  "src_path": "<your-folder-location>"
}

注意

az webapp up コマンドは、次の処理を実行します。

  • 既定の リソース グループを作成する。

  • 既定の App Service プランを作成する。

  • 指定された名前でアプリを作成 する。

  • ビルド自動化を有効にして、現在の作業ディレクトリからすべてのファイルを ZIP デプロイします。

  • 後で az webapp up またはプロジェクト フォルダー内の他の az webapp コマンドを使用してデプロイするときに再指定する必要がないように、パラメーターを .azure/config ファイルにローカルにキャッシュします。 キャッシュされた値は、既定で自動的に使用されます。

問題がある場合は、 お知らせください

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

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

az webapp up コマンドで、必要なリソースの作成とアプリケーションのデプロイを 1 つの手順で行ったので、次の手順に進むことができます。


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

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

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

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

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

アプリの参照

URL http://<app-name>.azurewebsites.net を使用して、お使いの Web ブラウザーで、デプロイされたアプリケーションを参照します。 既定のアプリ ページが表示された場合は、しばらく待ってからブラウザーを更新してください。

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 引数を使用すると、操作が完了する前にコマンドから戻ることができます。

問題がある場合は、 お知らせください

次のステップ