使用 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.tsqueries.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 可帮助您生成适用于 iosandroid 的原生代码,以及 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 Amplify 前端连接到 AWS Elastic Beanstalk 后端时出现 CORS 问题

在 React js 中使用现有的 aws amplify 项目

未找到 AWS Amplify 环境“开发”

将 Heroku Rails 应用程序与 Amazon RDS 后端结合使用时的 AWS 数据传输费用

Flutter 与 AWS 的集成(有和没有 Amplify)