概要
AWSでPostgresを利用するには料金が高いので、Hasuraの無料枠を使ってRDSにデータを保存するアーキテクチャにしている。
今回、ローカルで単体テストを行うにあたり、下記の赤枠部分を作成した。
dockerでDBやApolloサーバを動かし、sam local start-api
でLambdaとAPIGatewayを動かした。
環境
- Windows 10 Home
環境構築手順
GraphQLサーバ(Hasuraモック)の作成
Apollo ServerとPrismaではじめるGraphQL API開発入門 を参考に足回りを作成。
RDSの準備
dockerの公式コンテナを利用した。
docker-compose.yml
Apolloの入ったpackage.jsonを用意し、Docker上でセットアップ。
container_build.sh
RDSにテーブル作成
Prismaで定義し、マイグレーションを実施。
schema.prisma , migrate.sh
RDSにSeedデータ投入
Prismaで定義して実行。
seed.ts , seed.sh
Adminerで値が入ったことを確認。
GraphQL定義
Hasuraからスキーマを取得。
schema.graphql
GraphQLサーバ(Apollo)作成
スキーマからTypescript用の型を作成。
codegen.sh
Prismaに型を認識させる。
npm run generate
GraphQLスキーマのQueryとMutationのリゾルバ関数を作成
mutation/upsertScenario.ts , query - getScenario.ts , index.ts
実行
up.sh で 実行。
アポロサーバによって、 http://127.0.0.1:4000/ GraphQLを試すことができる。
Adminer によって、 http://127.0.0.1:8080 で DBを直接確認できる。
APIGatewatyのローカル実行
AWS CDKで作成したAPIGateway+Lambda(Node18)をローカルで動かしてみたメモで動作させたものとほぼ同様。
dockerで起動しているローカルのGraphQLサーバと通信させるため、親のホストを利用する設定にしている。(host.docker.internal
... WindowのDocker for Desktop限定。Linuxは10.0.2.2と思われ)
--env-vars
オプションで環境変数上書きを起動時に実施。
{
"Parameters": {
"GRAPHQL_ENDPOINT": "http://host.docker.internal:4000/",
"GRAPHQL_SECRET": "Do not use in local environment."
}
}
npm run local-api
でAPIGateway起動。
http://127.0.0.1:3000 がドメインとなる。
テスト実施
StepCIを利用。
成功。
2023.06.13
パラメータの先頭が数字だと、それ以降の文字列が送られないバグがあった。
7d8bb386-0f86-4dff-be34-86bb2f55b3662 → 7
最新版のテンプレートエンジンでは解決済なので、更新を行ったところ解決した。
pnpm add -D liquidless