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

Posted

技术标签:

【中文标题】如何将现有的 dynamo db 与 AWS Amplify 和 graphql 一起使用【英文标题】:How to use existing dynamo db with AWS Amplify and graphql 【发布时间】:2021-04-09 17:00:30 【问题描述】:

我们的应用程序在 dynamodb 中有现有的数据库。对于我们的一个新 React 应用程序,我们想要使用 AWS Amplify,并且我们正在尝试使用现有的表。

我创建了一个骨架项目并转到后端AWS AppSync console -> Data Sources 并将现有表映射到它。我在我的 react 应用程序中将该表定义添加到我的 schema.graphql 中。当我进行放大推送时,我看到它在 dynamodb 中创建了一个新表,而不是指向现有数据库。

我还尝试在 AppSync 控制台中映射其中一个表,并从本地项目执行 amplify pull,假设这将在我的本地 schema.graphql 中添加表的定义,但这也没有发生。它没有从后端应用同步控制台拉下新映射的数据源的详细信息。

我现有的数据库有大量数据,并且也与其他应用程序共享。我不想创建新表。

你能建议如何做到这一点吗?

我们也有现有的 lamdba 函数,我们也希望将其用于这个新的 Amplify 项目。您能否也为此提出建议。

非常感谢任何帮助!

【问题讨论】:

每个人都能解决这个问题?我也有这个问题 【参考方案1】:

下面文件中的第 22 行显示了 graphql.schema 转换器运行时如何构造表名;也就是说 - 名称源自 GraphQLAPI ID,这似乎是一种单向过程。

TableName: joinWithEnv('-', [SyncResourceIDs.syncTableName, Fn.GetAtt(ResourceConstants.RESOURCES.GraphQLAPILogicalID, 'ApiId')]),

https://github.com/aws-amplify/amplify-cli/blob/e1e07b245db0963c4655e646c53e7615febe2930/packages/graphql-transformer-core/src/util/syncUtils.ts

那么唯一的选择就是尝试修补生成的 CFN 脚本。

【讨论】:

【参考方案2】:

您可以使用amplify import storage 导入现有的 DynamoDB 表或 S3 存储桶。

更多:https://docs.amplify.aws/cli/storage/import/

也看看 Re-use existing AppSync GraphQL API - 如果 lambda 函数被 API 包装,它可能有助于重用它们。

【讨论】:

以上是关于如何将现有的 dynamo db 与 AWS Amplify 和 graphql 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

从 Parse 迁移到 AWS Dynamo DB

如何将现有的 Web 应用程序从 Heroku 迁移到 AWS

如何在 AWS lambda 函数中设置 dynamo db 触发器

使用nodejs的AWS Dynamo DB生产设置

如何使用 Terraform 将现有的“aws_route53_record”CNAME 更新/修改为 ALIAS

使用 AWS Appsync 和 GraphQL 查询 Dynamo DB 中的多个表