【FastAPI】FastAPIでwebサイトを作ってみる


はじめに

仕事や個人でLambdaを使ったWebサービスを作成しています。
FlaskやResponderも使ってみましたが、今回はFastAPIに挑戦したいと思います。

作るもの

  • AWS APIGateway + Lambda + Python + FastAPI を使ったサービスが構築できます
  • ServerlessFrameworkを使って構築していきます

対象読者

  • サーバーレスアプリケーションに触れてみたい人
  • ServerlessFrameworkを使ってみたい人
  • FastAPIを使ってみたい人

FastAPIとは

FastAPI は、Pythonの標準である型ヒントに基づいてPython 3.6 以降でAPI を構築するための、モダンで、高速(高パフォーマンス)な、Web フレームワークです。
https://fastapi.tiangolo.com/ja/

Responderもそうですが、Starlette に乗っかったフレームワークになっています。
Starletteが強力なので、APIだけでなく、Webサイトも作ることができます。

非同期処理を簡単に実装できます。
※Flaskを使っていたときは、非同期処理が簡単には実装できなかったです。

自動でドキュメントを作ってくれるのも便利です。


実行環境を構築

Github
https://github.com/acronhub/sls-python3-fastapi

ディレクトリ構成

MVCっぽくなるように試行錯誤しています。
正解がわからないのですが、他のフレームワークを参考にしたりして分けてみました。

app
┣ controllers/ ・・・ コントローラ(Controller)
┣ init/ ・・・ 準備
┣ libs/ ・・・ ライブラリ
┣ models/ ・・・ データベース(Model)
┣ static/ ・・・ 静的リソース
┣ templates/ ・・・ テンプレート(View)
┣ main.py
┣ requirements.txt
┗ serverless.yml

Docker環境を準備

Docker環境で用意しました。
Githubからクローン後は、以下2つの手順で環境は完成します。

  • AWSのIAMアカウントのアクセスキーを環境ファイルに設定します。
    • Github上のコードでは .env.example を用意しているので名前を .env に変えて利用します。
.env
AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
AWS_DEFAULT_REGION=ap-northeast-1
SERVERLESS_VERSION=2.15.0
  • ビルド
docker-compose build

ローカルPCで動作確認

  • コンテナ起動
docker-compose up

ローカルPCでドキュメントを確認

AWSにデプロイ

  • デプロイ
docker-compose run --rm app yarn run deploy

動作確認

  • エンドポイントがログに出力されているので、そこにアクセスします。
https://b02w4yeoh5.execute-api.ap-northeast-1.amazonaws.com/dev/

おわりに

自分はResponderとFastAPIの両方を使ってみて、どちらもベースにしているフレームワークが同じなので、出来ることは一緒だと思いました。
ただGithubの更新を見てみるとわかるのですが、活発なのはFastAPIになります。
ドキュメントも日本語が充実しているのと、検索でもヒットしやすくなってきていると思います。
ドキュメントが勝手に作られるのは、本当に助かるので今後も利用していきたいと思います。

今回はデータベースの実装を省きました。
時間があったら追記したいと思います。

参考サイト一覧