FastAPI?
モダンで高速なPythonのWebフレームワークだそうです。
最近人気らしいので業務で採用してました。
公式ドキュメント
https://github.com/tiangolo/fastapi
メンバーによって環境が違って導入をスムーズに進められなかったんですが、
Dockerを使ってみんなで同じ作業環境を共有できるようになったのでそのメモです。
作成したファイル
公式の手順に沿って進めていきます。
最終的にこんなファイル構造になっていればOKです。
超シンプル。
Dockerfile
公式ドキュメントのInstallationの項目に記載されているモジュールをインストールさせます。
ビルト時に勝手に走るので手動で必要モジュールを探す必要なくて便利ですね。
FROM python:3.7
WORKDIR /var/www/html
RUN pip install fastapi uvicorn
main.py
こちらもExampleの項目を参考に書きます。
ルートにアクセスされるとHelloWorldのオブジェクトを返却するAPIですね。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
docker-compose.yaml
Dockerfile
とmain.py
の橋渡し的なことをしています。
Dockerfileを使ってPythonのモジュールをインストールした後、
Run itの項目を参考にしてFastAPIサーバを起動するコマンドを叩かせます。
ここではポート9004で起動するよう設定しています。
version: '3'
services:
app:
container_name: FastAPI
build: ./docker
volumes:
- ./src:/var/www/html
ports:
- "9004:9004"
command: uvicorn main:app --reload --host 0.0.0.0 --port 9004
動作確認
docker-composeでコンテナを起動・ビルドします。
$ docker-compose up --build
Creating network "docker_fastapi_default" with the default driver
Building app
Step 1/3 : FROM python:3.7
---> 879165535a54
Step 2/3 : WORKDIR /var/www/html
---> Using cache
---> 31d5c58e6177
Step 3/3 : RUN pip install fastapi uvicorn
---> Using cache
---> 430430eecf7f
Successfully built 430430eecf7f
Successfully tagged docker_fastapi_app:latest
Creating FastAPI ... done
Attaching to FastAPI
FastAPI | INFO: Uvicorn running on http://0.0.0.0:9004 (Press CTRL+C to quit)
FastAPI | INFO: Started reloader process [1]
FastAPI | INFO: Started server process [7]
FastAPI | INFO: Waiting for application startup.
FastAPI | INFO: Application startup complete.
必要なモジュールがインストールされ、FastAPIサーバが起動しました。
curlコマンドでアクセスしてみましょう。
$ curl http://localhost:9004
{"Hello":"World"}
main.py
の定義通りの反応!
まとめ
FastAPIを使って簡単にAPIサーバを立ち上げられました!
Dockerを使えば少ないファイルで同じ環境を共有できるのもいいですね
Pythonではシェルスクリプトも実行できるので、
自動デプロイ用のコマンドとか実装して「擬似Jenkins」みたいなこともできて便利です。
Jenkins使えばいいじゃんとか言ってはいけない