📘

FastAPI on Vercel Serverless

2023/04/08に公開

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 のサービス仕様上、利用するプランによって制約が異なります。

参考情報

GitHubで編集を提案

Discussion