Azure Container Apps に Flask または FastAPI Web アプリをデプロイする

このチュートリアルでは、Python Flask または FastAPI Web アプリをコンテナー化して Azure Container Apps にデプロイする方法について説明します Azure Container Apps では、Docker コンテナー テクノロジを使用して、組み込みのイメージとカスタム イメージの両方をホストします。 Azure でのコンテナーの使用について詳しくは、Azure コンテナーのオプションの比較に関するページを参照してください。

このチュートリアルでは、Docker CLI と Azure CLI使用して Docker イメージを作成し、Azure Container Apps にデプロイします。 Visual Studio Code と Azure Tools 拡張機能を使用してデプロイすることもできます。

前提条件

このチュートリアルを完了するには、以下が必要です。

サンプル コードの入手

ローカル環境で、コードを取得します。

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

Dockerfile ファイルと .dockerignore ファイルを追加する

Dockerfile追加して、イメージのビルド方法を Docker に指示します。 Dockerfile では、Web 要求を Flask および FastAPI フレームワークに転送する運用レベルの Web サーバーである Gunicorn の使用を指定します。 ENTRYPOINT コマンドと CMD コマンドは、アプリ オブジェクトの要求を処理するように Gunicorn に指示します。

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "app:app"]

50505 は、この例のコンテナー ポート (内部) に使用されますが、任意の空きポートを使用できます。

requirements.txt ファイルに含まれていることgunicornを確認します。

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

不要なファイルを イメージから除外する .dockerignore ファイルを追加します。

.git*
**/*.pyc
.venv/

gunicorn の構成

Gunicorn は、gunicorn.conf.py ファイルで構成できます。 gunicorn.conf.py ファイルが実行されるgunicornのと同じディレクトリにある場合は、Dockerfile の場所またはCMD命令でその場所をENTRYPOINT指定する必要はありません。 構成ファイルの指定の詳細については、「Gunicorn の設定」を参照してください

このチュートリアルでは、推奨される構成ファイルで、使用可能な CPU コアの数に基づいてワーカーの数を増やすように GUnicorn を構成します。 ファイル設定 gunicorn.conf.py 詳細については、「Gunicorn の構成」を参照してください

# Gunicorn configuration file
import multiprocessing

max_requests = 1000
max_requests_jitter = 50

log_file = "-"

bind = "0.0.0.0:50505"

workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers

timeout = 120

イメージをローカルでビルドして実行する

イメージをローカルにビルドします。

docker build --tag flask-demo .

Docker コンテナー内でイメージをローカルに実行します。

docker run --detach --publish 5000:50505 flask-demo

http://localhost:5000ブラウザーで URL を開き、ローカルで実行されている Web アプリを確認します。

このオプションは --detach 、バックグラウンドでコンテナーを実行します。 このオプションは --publish 、コンテナー ポートをホスト上のポートにマップします。 ホスト ポート (外部) はペアの 1 つ目で、コンテナー ポート (内部) は 2 番目です。 詳細については、Docker 実行リファレンスを参照してください。

Azure に Web アプリをデプロイする

Docker イメージを Azure Container Apps にデプロイするには、az containerapp up コマンドを使用します。 (Bash シェルには次のコマンドが表示されます。 他のシェルに合わせて継続文字 (\) を変更します。

az containerapp up \
  --resource-group web-flask-aca-rg --name web-aca-app \
  --ingress external --target-port 50505 --source .

デプロイが完了すると、その中に次のリソースが含まれるリソース グループが作成されます。

  • Azure Container Registry
  • Container Apps 環境
  • Web アプリ イメージを実行しているコンテナー アプリ
  • Log Analytics ワークスペース

デプロイされたアプリの URL は、コマンドの出力にあります az containerapp up 。 ブラウザーで URL を開き、Azure で実行されている Web アプリを確認します。 URL の形式は次https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.ioのようになります。デプロイ<generated-text><location-info>に固有の形式です。

更新を行い、再デプロイする

コードを更新した後、前 az containerapp up のコマンドをもう一度実行して、イメージを再構築し、Azure Container Apps に再デプロイすることができます。 コマンドをもう一度実行すると、リソース グループとアプリが既に存在することを考慮し、コンテナー アプリのみを更新します。

より複雑な更新シナリオでは、az acr build コマンドと az containerapp update コマンドを一緒に使用して再デプロイして、コンテナー アプリを更新できます。

クリーンアップ

このチュートリアルで作成したすべての Azure リソースは、同じリソース グループ内にあります。 リソース グループを削除して、リソース グループ内のすべてのリソースを削除することが、アプリで使用されているすべての Azure リソースを削除する最も簡単な方法です。

リソースを削除するには、az group delete コマンドを使用します。

az group delete --name web-flask-aca-rg

グループは、Azure portal または Visual Studio Code と Azure Tools 拡張機能削除することもできます。

次のステップ

詳細については、次のリソースを参照してください。