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 拡張機能を使用してデプロイすることもできます。
前提条件
このチュートリアルを完了するには、以下が必要です。
Web アプリを Azure Container Apps にデプロイできる Azure アカウント。 (〘 Azure Container Registry と Log Analytics ワークスペース は、このプロセスで自動的に作成されます)。
ローカル環境にインストールされている Azure CLI、Docker、Docker CLI。
サンプル コードの入手
ローカル環境で、コードを取得します。
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 コンテナー内でイメージをローカルに実行します。
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 コマンドを使用します。
グループは、Azure portal または Visual Studio Code と Azure Tools 拡張機能で削除することもできます。
次のステップ
詳細については、次のリソースを参照してください。