将现有 DynamoDB 数据源与 Amplify 和 AppSync 结合使用

Posted

技术标签:

【中文标题】将现有 DynamoDB 数据源与 Amplify 和 AppSync 结合使用【英文标题】:Use an existing DynamoDB datasource with Amplify and AppSync 【发布时间】:2020-08-30 07:02:58 【问题描述】:

我有一个使用 Amplify(使用 AppSync API 和 Cognito)制作的工作应用程序。我想制作另一个不同的应用程序,但与我的第一个项目共享一些数据(相同的产品,但不同的目标、用法和安全规则)。

有没有一种干净的方法可以为那个新项目使用 Amplify,告诉 GraphQL API 从我的第一个 Amplify 项目中获取 DynamoDB 中的一些数据?

这些数据会经常变化,而且会很重 - 所以我不太喜欢任何同步解决方案。

我考虑过这些解决方案,但我没有足够的经验来判断其中一个是否好:

在这个新项目中不使用 Amplify 而是使用 SAM(但我将丢失 Amplify 提供的所有构建管道) 使用 Amplify 进行托管和身份验证,但使用 SAM 配置 AppSync 并将其插入我现有的数据源中 也许 CloudFormation 可以是答案,但我不知道如何在 Amplify 中直接与之交互

【问题讨论】:

您是否考虑过使用多前端工作流程? docs.amplify.aws/cli/teams/multi-frontend 是的,但我也想获得不同的后端——使用不同的 GraphQL api 模式和不同的用户池 您可以使用带有 AppSync aws.amazon.com/blogs/mobile/appsync-microservices 的微服务架构如果这是您需要的唯一数据,那么最简单的方法可能是创建一个解析器来从那里查询数据。 我会在答案上展开这个 【参考方案1】:

亚马逊有一篇关于微服务架构的文章可能对您有用 https://aws.amazon.com/blogs/mobile/appsync-microservices/

我不确定 Amplify 是否支持向其添加多个 API,如果支持,您可以添加它,然后仅在其上拉取该 API。

IMO 最简单的方法是创建一个查询端点,使用 lambda 从您的其他数据源获取数据。

因此,在这种情况下,您可以将架构编辑为类似的内容

query

  externalData [ExternalData] @function(name: "getExternalData")

然后你需要添加lambda函数getExternalData,它将负责根据需要查询数据。

上面的文章有关于这个架构的更深入的细节

【讨论】:

以上是关于将现有 DynamoDB 数据源与 Amplify 和 AppSync 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将现有的 dynamo db 与 AWS Amplify 和 graphql 一起使用

如何删除并重新创建由 mock api 创建的本地 dynamodb/appsync/amplify 数据库?

模拟和测试由 Amplify @model 创建的 DynamoDB 表

使用 Amplify 库的基于 DynamoDB GSI 的查询

如何将 AWS Amplify 控制台中的现有应用程序与 AWS Amplify CLI 连接?

在 AWS Amplify GraphQL DynamoDB 中按另一个表的字段(也称为交叉表或嵌套过滤)过滤列表查询