在本地复制并测试了API Gateway + Lambda + Hasura的配置备忘录
总结
为了降低成本,我们选择了使用Hasura的免费套餐将数据存储在RDS上,而不是使用AWS的Postgres服务。
为了进行本地单元测试,我们创建了以下所示的红框部分。
我在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确认值已经填入。
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直接查看数据库。
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
取得了胜利。
2023年6月13日 èr liù yuè shí rì)
如果参数的开头是数字,就会发生一个bug,导致之后的字符不会被发送。
7d8bb386-0f86-4dff-be34-86bb2f55b3662 → 7
由于使用最新版本的模板引擎,问题已经解决,我进行了更新后问题得到解决。
pnpm add -D liquidless
从Bug报告到修复的速度真的很快。