TODO アプリ用の API サーバーを作成した。サーバーレス構成で DB には RDS を使用した。
API Gateway(REST API), Lambda, RDS Aurora(MySQL), Cognito, CDK
AWS 環境は AWS CDK を利用して、検証環境=>本番環境の再現性を担保した。
lambda からインターネットにアウトバウンドする要件はなかったので NAT は作成せず、Public Subnet も消した。
RDB のマイグレーションは lambda 越しに行うことで ssh や system manager session manager を使わずに CLI コマンドのみで行えるようにした。
(CD として組み込むのは未達)
API Gateway に Cognito UserPool Authorizer を付けて API の認証を実装した。
Node, Express, Prisma, Jest, supertest
aws-serverless-lambda を用いて Express を lambda 上で実行した。
のちに middy の存在を知ったが実装には至らなかった。
Prisma を使用して DB 接続した。
DATABASE_URL は secret manager に格納した情報から作成する必要があったため、lambda のランタイム上で AWS SDK で取得した情報をもとに DATABASE_URL を作成した。
データテーブルとして、User, Board, Task の 3 つを用意した。
Board は User と Task のマッピング用の概念として、あとから導入するとハレーションが大きいと考えたため、導入した。BoardMenber のようなテーブルを導入することで、タスクを User 間で共有できるようになる想定である。
Task の検索は RDB の機能の範囲で済ませた。
作者自身に全文検索エンジンに関する知見が足らず、導入を見送った。
更新するときは以下を実行する
docker run -v $PWD/schemaspy:/output --net=host schemaspy/schemaspy:6.1.0 -t mysql -host localhost:53306 -db tadb -u tauser -p password -connprops useSSL\\\\=false -all
User | Board | Task | |
---|---|---|---|
GET /user |
R | R | |
POST /user |
C | C | C |
PUT /user |
U | ||
POST /board |
C | ||
PUT /board/:boardId |
U | ||
DELETE /board/:boardId |
D | ||
GET /board/:boardId/tasks |
R | ||
POST /board/:boardId/task |
C | ||
PUT /board/:boardId/task/:taskId |
U | ||
DELETE /board/:boardId/task/:taskId |
D | ||
PUT /board/:boardId/task/:taskId/finished |
U |
- Cognito UserPool のアカウントと User は別々に作成する
- Board 一覧をトップで表示するために GET
/user
は Board を含めて返す - サンプルとしての Board と Task を表示するために POST
/user
は Board と Task も作成する - アカウントと User の削除について、要件を出し切れていない。。。
- architecture overview
- base of cdk
- deploy all resourse
- integration
- db migration pipline
- rest server on local
- setup prisma
- setup express
- express on lambda
- restful api
- search tasks
- the others
- integration
- e2e test
- documentation
- definition of done
- design of architecture
- documentation of design
- implimentation
- test code
- playbook for launching application
- タスク
- Cognito 込みでテストできる画面
- User の createdAt と updatedAt 忘れてた
- アーキテクチャの文書化
- simulator の整備
- インフラ構築動作確認の手順
- setup-localが多分足りてない。やってみる。
- DB Index
- API インターフェースの見直しと文書化
- 入力チェック見直し
- 最大文字数
- 有効文字
- サニタイズ
- テスト: status の expext を追加
- エラーレスポンスの統一
- エラーレスポンスの文書化
- 入力チェック見直し
- 実装の見直し
- トランザクション見直し
- 運用
- ログ設計
- nat 落とす
- CI
- CD
- lambda insight
- synthetics monitor
- 内部品質
- Migrater の応答がエラーになっている
- テストの文言
- テストしやすい docker compose 環境
- カバレッジ取る
- use https://middy.js.org/
- 機能
- done API
- 検索強化
- 変更履歴
- 楽観ロック
- init via Cognito Sign Up