Neon(サーバーレス PostgreSQL)と接続する¶
Neon はサーバーレスの PostgreSQL。 FastAPI Cloud のダッシュボードからつなぐと、接続情報を環境変数としてアプリに自動で渡してくれる。
cf. Neon Integration - FastAPI Cloud
FastAPI Cloud ダッシュボードから Neon に接続する¶
Neon アカウントで認証する¶
アプリ詳細の Integrations タブを開いて、 Connect Integration を押す。

Add Integration のダイアログが開くので、 Neon を選ぶ。

Neon 側の認可画面がブラウザで開く。 FastAPI Cloud に渡す権限(Read projects / Read organizations)を確認して Authorize を押すと、 FastAPI Cloud に戻ってくる。

アプリと Neon を接続する¶
アカウントをつないだら、アプリで使うデータベースを選ぶ。 FastAPI Cloud に戻ると Add Integration の Neon に Connected が付いてるので、あらためて Neon を選ぶ。

Connect to Neon のダイアログが開くので、 project → branch → database の順に選んでいく。



最後に Configure Neon で、注入される環境変数名を確認する。 Neon の接続文字列は DATABASE_URL っていう名前で渡される。 <user> や <password> みたいなプレースホルダは、接続時に選んだデータベースの実際の値で埋められる。 Connect Neon を押すと接続される。

Integrations タブに戻ると、つないだデータベースが Connected として並んでる。これで接続完了。

コードから使う¶
連携すると、 FastAPI Cloud が PostgreSQL の接続文字列を DATABASE_URL 環境変数としてセットしてくれる。値は暗号化されたシークレットとして保存される。 Environment Variables 画面で見ると、値は伏字になってて、 Neon 連携由来なのを示す neondb バッジが付いてる。

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 に接続する代わりに、 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
例えばこんな感じ:
--secret を付けると暗号化シークレットになる。値を省くと伏字でプロンプトされるので、パスワードを画面に出さずに登録できる。 CLI で変えても自動では再デプロイされないので、次の fastapi deploy で反映される。