FastAPI Cloud¶
FastAPI Cloud は、 FastAPI アプリをコマンド 1 つで公開できるクラウドサービス。 FastAPI チームの方々が展開してる。
FastAPI Cloud でデプロイ¶
コマンド 1 つだけ。
特長と仕組み¶
主な特長はこんな感じ。
- Zero config deployments … 設定なし、コマンド 1 つでデプロイできる
- HTTPS by default … 証明書の準備なしで最初から HTTPS
- Autoscaling … リクエストに応じて自動でスケールする
fastapi deploy を実行すると、次の流れで進む: cf. How It Works - FastAPI Cloud
- アップロード
- コードとファイルをまとめて FastAPI Cloud に送る。
.gitignoreを見て仮想環境みたいな不要なものは自動で除外してくれる(.fastapicloudignoreを置けばさらに調整できる)。- このステップでは手元では何もインストール・ビルドしないので、ローカル環境は汚れない。
- 同時にアカウント側にデプロイの記録が作られる。
- インストールとビルド
- 送られたファイルをもとに、クラウド側で依存関係のインストールとビルドをする。
- Python の標準やよくある慣習に沿って処理されるので、特別な設定はいらない。
- デプロイ
- ゼロダウンタイムで公開する。
- 今動いてるインスタンスがリクエストをさばき続けたまま、新しいインスタンスを少しずつ立ち上げて切り替えるので、サービスは止まらない。
- リクエスト量に応じた自動スケール(autoscaling)もここで効く。
- デプロイの検証
- 新しいインスタンスがちゃんと動くか確認する。
- 問題があれば直前の成功したデプロイがそのまま残る(自動でロールバックされる)ので安心。
- 状況はダッシュボードから確認できる。
- ローカルで
fastapi devが動くアプリなら、 FastAPI Cloud でもそのまま動くはず。
DB(Neon)と連携する¶
Neon はサーバーレスの PostgreSQL。 FastAPI Cloud のダッシュボードからつなぐと、接続情報を環境変数としてアプリに自動で渡してくれる: cf. Neon Integration - FastAPI Cloud
Neon アカウントをつなぐ¶
- チーム設定の
Integrationsを開く。 - Neon の connect を押す。
- FastAPI Cloud を認可する(プロジェクトと組織への読み取りアクセスを求められる)。
- 認可できると FastAPI Cloud に戻ってくる。
アプリにデータベースをひもづける¶
アカウントをつないだら、アプリごとに使うデータベースを選ぶ。
- アプリ詳細の
Storageタブを開く。 - Neon の連携を選ぶ。
- organization → project → branch → database の順に選んでいく。
- そのまますぐ再デプロイもできる。
コードから使う¶
連携すると、 FastAPI Cloud が PostgreSQL の接続文字列を DATABASE_URL 環境変数としてセットしてくれる。値は暗号化されたシークレットとして保存される。
Note
DATABASE_URL をすでに別の用途で使ってるなら、連携のときに NEON_DATABASE_URL みたいな別名にもできる。
あとは データベース でやったように、接続文字列を環境変数から読んで SQLModel の engine を作るだけ。ローカルの SQLite から本番の PostgreSQL に変えても、コードはほぼそのまま。
import os
from sqlmodel import create_engine
# DATABASE_URL は連携時に環境変数として自動でセットされる
engine = create_engine(os.getenv("DATABASE_URL"))
os.getenv で直接渡してもいいし、 設定管理(pydantic-settings) の Settings 経由で読んでもいい。
SQLite との違い
- データベース で付けてた
connect_args={"check_same_thread": False}は SQLite 特有の設定なので、 PostgreSQL ではいらない。 - PostgreSQL に接続するドライバ(
psycopg2-binaryなど)もインストールしておく(uv add psycopg2-binary)。
接続情報を環境変数で渡す¶
Neon を FastAPI Cloud と連携させる代わりに、 Neon で先にデータベースを作って、その接続情報を FastAPI Cloud の環境変数として登録しても繋がる。 設定管理(pydantic-settings) のように環境変数から読むようにしておく。
登録はダッシュボードの Environment Variables 画面でやるのが手軽。変数名は自分のアプリが読むものに合わせる。 POSTGRES_* から接続 URL を組み立てる作り(full-stack-fastapi-template 方式)なら、 POSTGRES_SERVER / POSTGRES_PORT / POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD を Neon の接続情報で埋める。

- パスワードみたいな秘密の値は
Secretをオンにする。暗号化されてダッシュボードでは見えなくなる(実行時はアプリから読める)。 - 入力したら
Save and Redeployで登録と再デプロイ(環境変数の変更は再デプロイで反映される)。 - 数が多いときは
Import .envでローカルの.envをまとめて取り込める。その.env自体はパスワードを含むのでコミットしない(.gitignoreに入れる)。
単一の DATABASE_URL で読む作りなら、 DATABASE_URL を 1 つ登録するだけでいい(Web UI 連携が自動でやってくれるのと同じ変数)。
CLI でも登録できる
ダッシュボードの代わりに fastapi cloud env set でも登録できる: cf. Env Command - FastAPI Cloud
fastapi cloud env set POSTGRES_SERVER ep-cool-darkness-12345678-pooler.ap-southeast-1.aws.neon.tech
fastapi cloud env set POSTGRES_PORT 5432
fastapi cloud env set POSTGRES_DB neondb
fastapi cloud env set POSTGRES_USER neondb_owner
fastapi cloud env set --secret POSTGRES_PASSWORD
--secret を付けると暗号化シークレットになる。値を省くと伏字でプロンプトされるので、パスワードを画面に出さずに登録できる。 CLI で変えても自動では再デプロイされないので、次の fastapi deploy で反映される。