Azure App Service へのデプロイ
環境
端末 : mac (MacBook Pro M1 Pro)
OS : Ventura 13.6.3
メモリ : 32GB
ターミナル : Warp
事前準備
-
az
コマンドを使えるように、Azure CLI
をインストール。 -
Python
を使えるように準備。今回は、asdf
で3.11
をインストール。 - デプロイ先の Azure サブスクリプション を用意。
ローカルでサンプルアプリを作成
ファイル構成
sample-app
├── Dockerfile
├── compose.yml
├── main.py
└── requirements.txt
サンプルアプリ用のディレクトリを作成し、Python の仮想環境を作成。
python -m venv .venv
仮想環境を有効化。
. .venv/bin/activate
requirements.txt
を作成して、以下の記述を貼り付け。
※もしくは、pip install fastapi uvicorn
で、FastAPI
関連のライブラリをインストールしたあと、pip freeze > requirements.txt
でライブラリを書き出す。
annotated-types==0.6.0
anyio==3.7.1
click==8.1.7
fastapi==0.105.0
h11==0.14.0
idna==3.6
pydantic==2.5.2
pydantic_core==2.14.5
sniffio==1.3.0
starlette==0.27.0
typing_extensions==4.9.0
uvicorn==0.25.0
main.py
を作成して、API のエンドポイントを作成する。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "hello, fastapi"}
Dockerfile
を作成して、コンテナを作成できるようにしておく。
FROM python:3.12
WORKDIR /app
COPY . .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--reload", "--port", "8080"]
compose.yml
を作成して、ローカルで実行しやすくする。
version: '3'
services:
app:
build: .
volumes:
- .:/app
ports:
- 8080:8080
ローカルで確認するときは、以下のコマンドで。
docker compose up
App Service へデプロイする
主な流れ
- リソースグループを作成
- Azure Container Registory (ACR) を作成
- App Service を作成
※全部 az
コマンドでできるようにしたい。。。
リソースグループを作成
Azure ポータルから任意の名前でリソースグループを作成する。
作成したリソースグループの名前は、以後のコマンド内で使用する。
リソースグループの名前を決めて、以下コマンドで作成する。
※oriondataplex
はリソースを区別するために適当につけたプロジェクト名。
projectName=oriondataplex
location="japaneast"
resourceGroup="rg-"${projectName}
az group create --name ${resourceGroup} --location ${location}
Azure Container Registory (ACR) を作成
基本のコマンドはこれ。作成したい ACR の名前と、作成先のリソースグループを指定する。
必要な情報は環境変数に設定(以下はコマンド中で設定した)。
containerRegistryName="cr"${projectName}
az acr create --name ${containerRegistryName} --resource-group ${resourceGroup} --sku basic --admin-enabled true
ACR 作成後、ローカルからコンテナーイメージをビルド、プッシュしておく。
az acr build --registry ${containerRegistryName} --resource-group ${resourceGroup} --image sampleapp .
App Service を作成
Azure ポータルから任意の名前で App Service を作成する。
- 公開は、Docker コンテナーを設定
- Docker の各種設定は以下の通り。
- オプション:
単一コンテナー
- イメージソース:
Azure Container Registory
- レジストリ:
作成した ACR の名前
- イメージ:
プッシュしたコンテナ名
- タグ:
latest
※特に変更しない
- オプション:
上記の設定で「作成」をする。
これでコンテナーがデプロイされる。
以後、コンテナー更新後に App Service へ自動適用するために
- App Service を開き、
デプロイ センター
を開く。 - 設定画面内にある、
継続的デプロイ
をオン
に切り替える。 - 画面上部にある
保存
をクリックし設定を反映する。
上記設定後にリソースグループに移動すると、Webhook(コンテナーレジストリ webhook
が種類になっているリソース)が作成される。
以後 az acr build
でコンテナーを更新すると、App Service へ自動デプロイされるようになる。