将现有 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 的查询