📘
FastAPI on Vercel Serverless
Vercel の Serverless Functions に Python Runtime(Beta)が提供されている。
vercel/example/python には、Django と Flask のサンプルがあるが FastAPI が無かったので試した
事前準備
- Vercel のアカウントを作成し、Vercel CLI をインストールする
- Python 3.9 環境を用意する
- Vercel の Python Runtime は、2023 年 4 月現在デフォルトで 3.9 が利用されるため
- Pipenv をインストールする
FastAPI をインストールする
事前準備が整ったら、下記のコマンドで Python 環境をセットアップ
$ pipenv —-python 3.9
$ pipenv install fastapi
Pipfile と、Pipfile.lock が作成されたら OK
Fast API のソースを準備
FastAPI 公式サイトに例示されたサンプルコードの一部を利用する
api ディレクトリ配下に server.py を作成
$ mkdir api
$ touch api/server.py
$ tree .
.
├── Pipfile
├── Pipfile.lock
└── api
└── server.py
server.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
デプロイの準備
vercel.json を作成
$ touch vercel.json
tree .
.
├── Pipfile
├── Pipfile.lock
├── api
│ └── server.py
└── vercel.json
vercel.json
{
"rewrites": [
{
"source": "/(.*)",
"destination": "/api/server"
}
]
}
デプロイ
Vercel CLI でデプロイするだけ
$ vercel login
$ vercel .
デプロイ完了後に curl で検証
$ curl -s https://xxxxxxxxxx.vercel.app | jq .
{
"Hello": "World"
}
まさに API の 3 分クッキング。
ローカルテスト
vercel dev したら良い
$ vercel dev
Vercel CLI 28.18.3
> Ready! Available at http://localhost:3000
削除
デプロイした API が不要になったら、Vercel コンソールから削除するか
Vercel CLI で削除しておきましょう。
$ vercel rm my-app
その他
Vercel のサービス仕様上、利用するプランによって制約が異なります。
Discussion