クイック スタート: 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 アカウント。 無料でアカウントを作成できます。
- Python 3.9 以降がインストールされていること。
注意
この記事には、Azure App Service を使用した Python Web アプリのデプロイに関する最新の手順が含まれています。 Windows 上の Python はサポートされなくなりました。
サンプル アプリケーション
このクイックスタートは、Flask、Django、または FastAPI を使用して行うことができます。 このクイックスタートを進めるのに役立つように、各フレームワークのサンプル アプリケーションが用意されています。 サンプル アプリケーションをダウンロードするか、ローカル ワークステーションに複製します。
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
ローカルでアプリケーションを実行するには:
アプリケーション フォルダーに移動します。
cd msdocs-python-flask-webapp-quickstart
アプリの仮想環境を作成します。
py -m venv .venv .venv\scripts\activate
依存関係をインストールする:
pip install -r requirements.txt
アプリを実行します。
flask run
Web ブラウザーで
http://localhost:5000
のサンプル アプリケーションを参照します。
問題がある場合は、 お知らせください。
Azure で Web アプリを作成する
Azure でアプリケーションをホストするには、Azure で Azure App Service Web アプリを作成する必要があります。 Web アプリは、Azure CLI、VS Code、Azure 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 コンテナーが実行されています。
おめでとうございます。 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
引数を使用すると、操作が完了する前にコマンドから戻ることができます。
問題がある場合は、 お知らせください。