LoginSignup
7
9

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-15

はじめに

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

作るもの

lambda.png

  • 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

sc_index.png

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

sc_docs.png

AWSにデプロイ

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

動作確認

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

おわりに

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

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

参考サイト一覧

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9