とある日の雑な技術メモ
(Nestjs, hasura, Prisma) on Cloud Run with Cloud SQL for PG with Datadog まで持っていきたい。
- Local で Nestjs x hasura x pg を動かす
- コンテナ化して Cloud Run にあげる
- Cloud SQL と繋ぐ
- Datadog 入れる
土日でやれたらいい感じ
先に調べたこと
Nest.js => hasura の順でわかりやすそうなので一旦これを進めてみる。
Hasura
https://qiita.com/sho-hata/items/2dbd41be42662007071e が良さそうなので読む。
- ただの CRUD なら工数0で作れる
- 権限管理もできる
- ドメインロジックは統合する方法がある
- クライアントからは Hasura のことだけ気にしてればいい
- 高機能な GraphQL サーバー
脇道に逸れるが、NestJS を bun でセットアップできるか怪しい。
一旦 yarn で入れて、bun でも動くかやってみる。
動かなかったのでしゃーなしで yarn でやる。
と思ったらミスっていたことに気づいた。
biome の auto format で import が import type になってしまって、NestJS の DI の仕組みと噛み合わずに正しく動いてなかったので biome の設定を変えた (useImportType: off)
Cloud Run と GitHub Actions のセットアップ
この通りに進める。
Workload identity の設定
コンソールでコマンドを叩きまくる。
そのままやっても全然上手くいかなかったので色々調べて頑張ってなんとかなった。
特にサービスアカウントにロールを割り当てる時、gcloud projects コマンドを使わないといけない。
GitHub Actions の設定
この2つを参考にした。
00:00 Introduction to rapid prototyping
00:58 Creating a project in Hasura
01:19 Working with DBDiagram.io
05:50 Creating our tables in Postgres
08:10 Creating mock data with Mockeroo
10:00 Importing mock data
11:20 Working with Retool
Hasura Cloud 立てて、Heroku の pg に繋いで、DBDiagram.io でデータモデリングして、Mockaroo でモックデータ作って、Retool で簡易 UI 作ったら爆速プロトタイピングできるという話。
すごくいい。
本番運用の話が助かる。
マイグレの Hasura と ORM どっち使う問題は、Hasura で主にやって ORM と差が出たのを検知して通す通さないを決める運用とのこと。
JWT で権限絞れるのも Good、さらに order.user.userId のようにリレーションの先も見れるのは Great。
graphql-codegen のスキーマをロール別に分けたい場合も問題なし。
続き。Hasura で Actions, Remote Schema を使うところから。
詰まったとこ
apollo-server-express@2.x.x
はもう古くなっていて、@nestjs/graphql
を v9 に落として使うか、最新で使いたい場合は @nestjs/apollo
@apollo/server
を入れて、GraphQLModule に driver: ApolloDriver
を加えるかのいずれかが必要だった。
新しいほうがいいので後者にした。
Remote Schema
api サーバーの /graphql
エンドポイントを Hasura に登録することで api サーバーの graphql スキーマを統合できる。