はじめに
仕事や個人で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 に変えて利用します。
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になります。
ドキュメントも日本語が充実しているのと、検索でもヒットしやすくなってきていると思います。
ドキュメントが勝手に作られるのは、本当に助かるので今後も利用していきたいと思います。
今回はデータベースの実装を省きました。
時間があったら追記したいと思います。