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

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

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

  1. アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます
  2. Python 3.9 以降がインストールされていること。

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

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

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

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 アプリのスクリーンショット

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

2 - Azure で Web アプリを作成します。

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

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 account 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 ファイルにローカルにキャッシュします。 キャッシュされた値は、既定で自動的に使用されます。

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

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

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

前の手順で、必要なリソースの作成とアプリケーションのデプロイを 1 つの手順で行ったので、「4 - アプリの参照」に進むことができます。


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

4 - アプリの参照

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

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

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

おめでとうございます。 App Service に Python アプリをデプロイすることができました。

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

5 - ログのストリーミング

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)

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

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

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

次のステップ