使用 RDS 后端修改 AWS Amplify 中的解析器
Posted
技术标签:
【中文标题】使用 RDS 后端修改 AWS Amplify 中的解析器【英文标题】:Modifying resolvers in AWS Amplify with RDS backend 【发布时间】:2020-07-11 13:09:03 【问题描述】:当使用带有 dynamodb 后端的 AWS Amplify 时,可以通过在本地修改文件然后执行 amplify push
来更新 AppSync 架构和解析器。
我正在使用 RDS(如文档中所述,使用 amplify api add-graphql-datasource
添加它)。查询和解析器会自动在 AppSync 中设置。当我更新 Aurora RDS 架构时,我再次运行 amplify api add-graphql-datasource
来更新查询和解析器。
但是如何使用 amplify CLI 添加新的查询/突变并将它们绑定到新的解析器(在本地主机上的 vtl
文件中定义)?
我想出了如何使用 AppSync Web 控制台来做到这一点。我在 AppSync 中修改架构并创建解析器,然后使用amplify codegen
更新App.ts
、queries.ts
等。但是,这种方法至少有两个原因是不好的。
-
在处理多个环境时,必须通过 AppSync 控制台手动更改每个环境,这对于大型项目来说很困难。
amplify codegen
不会更新 localhost 上的 schema.graphql
文件。
在对 AppSync 进行更改后执行 amplify push
over 使用本地主机上定义的架构并覆盖 AppSync 控制台中定义的架构。
app/amplify/backend/<backend_name>/resolvers
中的自定义解析器未与 AppSync 同步
堆栈文件不会自动更新。
我是不是走错了路?在使用 RDS 后端时,是否有更好的方法来使用 Amplify CLI 更新架构/解析器?
谢谢!
【问题讨论】:
你解决了吗?我们即将进行 AWS 迁移,并且正因为这个原因,我们几乎要放弃 Amplify。 SQL 似乎还没有完成,而且过于专注于 DynamoDB。 我同意。遗憾的是,RDS 不支持大多数很酷的放大功能。不过,我确实设法获得了不错的工作流程。 【参考方案1】:好的,
使用多个环境时,必须通过 AppSync 控制台手动更改每个环境,即 对于大型项目来说很难。
为每个环境保留一个 git 分支。首先在 dev
分支中进行更改并运行 amplify push
以将更改推送到 AppSync dev
项目。当需要将更改引入暂存时,请执行以下操作:
cd app && amplify env checkout staging && amplify env pull --restore && amplify status
git checkout staging && git merge dev
amplify push
amplify codegen 不会更新 localhost 上的 schema.graphql 文件。
没错,但这不是amplify codegen
应该做的,所以我不确定我写的是什么。文档很清楚:
Codegen 可帮助您生成适用于 ios 和 android 的原生代码,以及 Flow 和 TypeScript 的类型生成。它还可以生成 GraphQL 语句(查询、突变和订阅),以便您 不必手动编码。
..下一个!
对 AppSync 进行更改后执行放大推送使用 在 localhost 上定义的架构并覆盖在 AppSync 控制台。 我不确定我在这里想说什么。但最终为我工作的工作流程是
-
更新本地主机上的
schema.graphql
在 localhost 上创建解析器文件
amplify push
更新 AppSync
app/amplify/backend/
/resolvers 中的自定义解析器是 未与 AppSync 同步
我错了。如果您正确创建所需的解析器文件,则 AppSync 解析器在运行 amplify push
时会正确配置。我的错误是我忘记创建响应映射器模板文件。
堆栈文件不会自动更新。
确实如此,但您很快就会习惯手动编辑堆栈文件。确实,如果有一个快速添加功能会很好,但由于您只是添加一个json
文件,因此很容易将一个快速 python 脚本组合在一起为您执行此操作。
【讨论】:
以上是关于使用 RDS 后端修改 AWS Amplify 中的解析器的主要内容,如果未能解决你的问题,请参考以下文章
将 AWS Amplify 前端连接到 AWS Elastic Beanstalk 后端时出现 CORS 问题
在 React js 中使用现有的 aws amplify 项目