1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

API Gateway + Lambda+Hasuraの構成をローカルで模倣してテストを行ったメモ

Last updated at Posted at 2023-06-11

概要

AWSでPostgresを利用するには料金が高いので、Hasuraの無料枠を使ってRDSにデータを保存するアーキテクチャにしている。
今回、ローカルで単体テストを行うにあたり、下記の赤枠部分を作成した。

image.png

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で値が入ったことを確認。

接続情報は下記。
image.png

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を直接確認できる。

image.png

APIGatewatyのローカル実行

AWS CDKで作成したAPIGateway+Lambda(Node18)をローカルで動かしてみたメモで動作させたものとほぼ同様。

dockerで起動しているローカルのGraphQLサーバと通信させるため、親のホストを利用する設定にしている。(host.docker.internal ... WindowのDocker for Desktop限定。Linuxは10.0.2.2と思われ)
--env-vars オプションで環境変数上書きを起動時に実施。

env.json , package.json

{
  "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を利用。

workflow.yml

成功。

image.png

2023.06.13

パラメータの先頭が数字だと、それ以降の文字列が送られないバグがあった。
7d8bb386-0f86-4dff-be34-86bb2f55b3662 → 7

最新版のテンプレートエンジンでは解決済なので、更新を行ったところ解決した。

pnpm add -D liquidless

バグ報告から修正までのスピード感すごい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?