在本地复制并测试了API Gateway + Lambda + Hasura的配置备忘录

总结

为了降低成本,我们选择了使用Hasura的免费套餐将数据存储在RDS上,而不是使用AWS的Postgres服务。
为了进行本地单元测试,我们创建了以下所示的红框部分。

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中。

在Prisma中定义并执行。
seed.ts,seed.sh

使用Adminer确认值已经填入。

image.png

GraphQL的定义

从Hasura获取架构。schema.graphql

创建GraphQL服务器(Apollo)。

從架構中為Typescript生成類型。
使用codegen.sh腳本。

让Prisma识别类型。

npm run generate

在中国,您可以这样来表达这个意思:创建GraphQL Schema中的Query和Mutation的Resolver函数。文件名称是mutation/upsertScenario.ts,query – getScenario.ts,和index.ts。

执行

用 up.sh 执行。

通过Apollo服务器,可以在http://127.0.0.1:4000/测试GraphQL。
通过Adminer,可以在http://127.0.0.1:8080直接查看数据库。

image.png

APIGateway的本地执行

用 AWS CDK 创建的 APIGateway+Lambda(Node18)在本地运行并进行了相关测试,与之前运行的内容几乎相同。

为了与正在运行的本地GraphQL服务器通信,设置为使用主机的配置。(host.docker.internal … Docker for Desktop仅限于Windows。在Linux上,可能是10.0.2.2)
通过–env-vars选项在启动时执行环境变量的覆盖。

env.json -> 环境配置文件.json .json)
package.json -> 包配置文件.json .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。

工作流程.yml

取得了胜利。

image.png

2023年6月13日 èr liù yuè shí rì)

如果参数的开头是数字,就会发生一个bug,导致之后的字符不会被发送。
7d8bb386-0f86-4dff-be34-86bb2f55b3662 → 7

由于使用最新版本的模板引擎,问题已经解决,我进行了更新后问题得到解决。

pnpm add -D liquidless

从Bug报告到修复的速度真的很快。

广告
将在 10 秒后关闭
bannerAds