Lizard に FastAPI をデプロイする

Uvicorn が 0.0.0.0:8000 で待ち受けるようにして、Lizard で FastAPI を実行します。アプリの依存関係には FastAPI と Uvicorn の両方を含めてください。app = FastAPI() を宣言するファイルを import するだけでは、HTTP サーバーは起動しません。

プロジェクト例

FastAPI example には、アプリ、Procfile、固定された依存関係、MIT ライセンス、HTTP テストが含まれています。その CI は Linux 上で本番用の Uvicorn エントリポイントを実行します。GitHub からコミット df522c1 もデプロイし、2026-09-09 に公開 HTTPS 経由でヘルス、OpenAPI、対話型ドキュメント、JSON エコー、不正な入力、存在しないルートを確認しました。

アプリを準備する

この例では、requirements.txt と、アプリケーションルートにある main.py を使用します:

from fastapi import FastAPI
 
app = FastAPI()
 
@app.get("/health")
def health():
    return {"status": "ok"}

fastapi と uvicorn を依存関係のワークフローに追加し、解決済みでテスト済みのバージョンを requirements.txt に保存します。依存関係が対応している場合は、.python-version で Python のマイナーバージョンを選択します。たとえば 3.13 です。

明示的な import ターゲットを持つ Procfile を作成します:

web: uvicorn main:app --host 0.0.0.0 --port 8000

main:app は、main.py 内の app オブジェクトを意味します。src/api.py には、src.api:app のように、アプリルートから動作する import パスを使用してください。明示的な Procfile により、カスタムレイアウトでのソースコードパターン検出への依存を避けられます。

設定値
Installpip install -r requirements.txt
StartProcfile web: command
サービスポート8000
ビルド outputPythonソースとインストール済み依存関係

ローカルでテストする

ローカルの仮想環境を使用します:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000

別のターミナルで:

curl --fail http://localhost:8000/health

{"status":"ok"} を含む正常なレスポンスを期待してください。開発中はリロードモードを維持します。FastAPIサーバーガイド では、ASGI サーバーと import ターゲットについて説明しています。

デプロイ

CLI setup の後、アプリケーションルートからアップロードします:

lizard init --name fastapi-app
lizard add --service api
lizard up --service api --port 8000
lizard logs --build --service api --json
lizard logs --service api --json
lizard ps --json

.venv/、__pycache__/、.env のファイルは除外してください。サービスの build/start オーバーライドは未設定のままにして、lizardpack が Procfile を読み取るようにします。ここでの requirements ベースの経路では、別個の compile コマンドは不要です。

返された HTTPS URL で /health をリクエストし、その後に実際の API アクションをテストします。TCP ヘルスプローブで確認できるのは、そのプロセスがポートを開いていることだけです。ヘルスエンドポイントには、アプリにとって重要なチェックを追加できます。

データとよくある障害

認証情報は 変数とシークレット を通じて設定します。アプリがデータベースを必要とする場合は Managed Postgres を追加し、サービススコープの接続参照を使用してください。コンテナローカルのファイルは永続的なアプリケーションストレージではありません。ストレージとリカバリ を参照してください。

No module named uvicorn の場合は、インストールされた requirements を確認してください。ASGI の import エラーについては、同じルートから正確な Procfile コマンドをローカルで実行します。サービスがいつまでも healthy にならない場合は、ポート 8000 と bind host を確認してください。サーバーログがないままプロセスが終了する場合は、Uvicorn ではなく単に python main.py を実行していないか確認してください。

2026 年 9 月 9 日のデプロイ確認とその制限については、テスト済みバージョンとクラウド結果 を参照してください。