8
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

仕事や個人で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になります。
ドキュメントも日本語が充実しているのと、検索でもヒットしやすくなってきていると思います。
ドキュメントが勝手に作られるのは、本当に助かるので今後も利用していきたいと思います。

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

参考サイト一覧

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?