fastapiをdockerで開発し,AWSのlambdaにデプロイするためのレポジトリ.
backend用というわけではないですが,backend用に開発したのでそのまま名前についてます.
なにかわからないことがあればお聞きください.
わかるかはわからないですが...
できるだけlinterに頼るようにしています.
- migrationの作成
./run.sh doc fastapi
で実行しながらアプリの開発- testファイルの更新
./run.sh invoke
でlocalで目指す挙動がされるかの確認dev
にデプロイして実際の環境で動くかの確認
npm run cdk deploy -c environment={env} --profile {PROFILE}
または
cp .env.sample .env
したのちに、プロファイルを設定してから
./run.sh deploy
このプロジェクトは基本的にfastAPIで実行しています
関連の説明は,apiフォルダ下のREADMEで確認する
flake8 を用いている
純粋なflake8ではpoetryの設定ファイルが使えないので、.venvに入っているpflake8を利用している
api/src/
のみで、api/tests
に対しては実行しない
docker におけるapp/
直下においてpflake8 src/
を実行する
これの省略が
./run.sh doc(ker) f(lake8) # 括弧内は省略可
原因は下記 URL で大体わかる
https://www.flake8rules.com/rules/{E125}.html
npm run invoke
または(下をまとめたのが上のコマンド)
- テンプレートファイルの作成
cdk synth-c environment=local
- sam の実行
sam local start-api -t ./cdk.out/LambdaFastapiStack-local.template.json --docker-network lambda_fastapi_backend
npm run invoke:ins # 依存関係解決用のzipファイル作成とsynth,invokeのセット
- python のライブラリインポートのための docker-compose の起動
./run.sh doc ins (docker-compose -f api/docker/docker-compose.yaml run app ./run.sh install)
python_module/dependences.zip
が作成される - local での実行 (synth と local invoke)
npm run invoke
REAT の client ツールとして、vscodoe の拡張機能を利用
詳しくはREADME.mdで確認する
https://github.com/TheDesignium/lambda_fastapi_rest_client
このレポジトリに実態は存在
APIのドキュメントは, rest_client/openapi.yaml
で確認できます。
VScode の拡張機能swaggerViewer
または、
fastAPIを起動(./run.sh doc fastapi
)して、http://0.0.0.0/docs より確認してください.
pre-commitで最新かを確認するようになっています
コンテナで作成する都合上、一度src/
に生成してから移動するようにしています
./run.sh doc openapi
これ単体で用いることを考え、subTree として別のレポジトリとしている
git subtree push --prefix=rest_client rc main
でrest_client
のブランチも更新されることになる
- 環境変数の作成と編集
vscodeの場合は、
make create_env
lib/.env.yaml
とapi/docker/.env
が開くのでそのまま編集して保存する。特にmysqlのポートに重複がないようにする。 - 環境の作成
make install
or
-
このリポジトリをクローンする
git clone --recursive [email protected]:TheDesignium/0_rd_lambda_fastapi_backend.git
-
依存関係をダウンロードする
npm ci
-
docker がなければダウンロード (sam の実行と python のライブラリのダウンロードに必要)
-
vscode の設定をコピー
- メインの設定をコピー
ライブラリなどの実行を docker でやっている関係で仮想環境上にライブラリがあるため
cp .vscode/settings.sample.json .vscode/settings.json
- REST clientの設定を追記
rest_client/.vscode/settings.sample.json
- メインの設定をコピー
ライブラリなどの実行を docker でやっている関係で仮想環境上にライブラリがあるため
-
pre-commit(python の整形ツール)
- インストール
brew install pre-commit
- pre-commit の適応
pre-commit install
- インストール
-
docker compose用のプロジェクト名、ポートの指定ファイルの準備
cp api/docker/.env.sample api/docker/.env
-
sam local invoke 時の DB 接続用ネットワークの作成
docker network create lambda_fastapi_backend
- 環境変数のコピー
cp lib/.env.sample.yaml lib/.env.yaml
npm run env
- python のライブラリインポートのための docker-compose の起動
docker-compose -f api/docker/docker-compose.yaml run app poetry install
- db のマイグレーション
./run.sh migrate
.
├─ README.md # これ
├─ api/ # lambdaのスクリプト、以下はそこのREADME.mdを参照
├─ bin/ # app定義ファイルを格納するフォルダ
├─ cdk.out/ # cdk synthの出力ファイル
│ # 非追跡(asset.../はログみたいなものなので最新以外消しても良い)
├─ lib/ # cdkの定義ファイルなどを格納する
├─ test/ # cdkのテスト アプデの時に使いやすい、cdkの設計思想が弱いため、使えない
├─ node_modules/ # cdk用のライブラリの保存場所、.vscodeにて非表示に設定
├─ rest_client/ # RESTのclient設定を定義したサブモジュール
├─ .pre-commit-config.yaml # pre-commitの設定ファイル
├─ cdk.json # cdk実行のためのの設定ファイル
├─ jest.config.js # tsのlinter設定ファイル
├─ run.sh # 全体的なコマンドを確認するためのシェルスクリプト, ./run.shで内容確認
└─ tsconfig.json # typescriptの設定ファイル
本リポジトリは NEC ソリューションイノベータ Advent Calendar 2022 の掲載記事のソースコードを参考にしています。