Open4

Azure App Service へのデプロイ

naan4810naan4810

環境

端末 : mac (MacBook Pro M1 Pro)
OS : Ventura 13.6.3
メモリ : 32GB
ターミナル : Warp

事前準備

  • az コマンドを使えるように、Azure CLI をインストール。
  • Python を使えるように準備。今回は、asdf3.11 をインストール。
  • デプロイ先の Azure サブスクリプション を用意。
naan4810naan4810

ローカルでサンプルアプリを作成

ファイル構成

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 でライブラリを書き出す。

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 のエンドポイントを作成する。

main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "hello, fastapi"}

Dockerfile を作成して、コンテナを作成できるようにしておく。

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 を作成して、ローカルで実行しやすくする。

compose.yml
version: '3'

services:
  app:
    build: .
    volumes:
      - .:/app
    ports:
      - 8080:8080

ローカルで確認するときは、以下のコマンドで。

docker compose up
naan4810naan4810

App Service へデプロイする

主な流れ

  1. リソースグループを作成
  2. Azure Container Registory (ACR) を作成
  3. 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 ※特に変更しない

上記の設定で「作成」をする。
これでコンテナーがデプロイされる。

naan4810naan4810

以後、コンテナー更新後に App Service へ自動適用するために

  1. App Service を開き、デプロイ センター を開く。
  2. 設定画面内にある、継続的デプロイオン に切り替える。
  3. 画面上部にある 保存 をクリックし設定を反映する。

上記設定後にリソースグループに移動すると、Webhook(コンテナーレジストリ webhook が種類になっているリソース)が作成される。

以後 az acr build でコンテナーを更新すると、App Service へ自動デプロイされるようになる。