reactjs - 添加 GraphQL API 时能够指定现有 DynamoDB 源
问题描述
我们在使用 Amplify 创建 AWS GraphQL AppSync API 时遇到问题。我们无法连接到 DynamoDB 的现有表。使用 GraphQL 转换器(例如“@model”)在 DynamoDB 中创建新表。这是我的架构代码。
type Planet @model @key(fields: ["guid"])
{
guid: String!
name: String!
description: String
}
此模式代码在 DynamoDB 中创建新表,而我想将 API 连接到现有表,例如“Planet”。
解决方案
根据 Amplify文档,
单个 @model 指令配置以下 AWS 资源:
- 默认情况下启用 PAY_PER_REQUEST 计费模式的 Amazon DynamoDB 表。
- 配置为访问上表的 AWS AppSync 数据源。
- 附加到 DataSource 的 AWS IAM 角色,允许 AWS AppSync 代表您调用上表。
- 最多 8 个解析器(创建、更新、删除、获取、列表、onCreate、onUpdate、onDelete),但这可以通过 @model 指令上的查询、突变和订阅参数进行配置。
- 用于创建、更新和删除突变的输入对象。
- 过滤输入对象,允许您过滤列表查询和连接字段中的对象。
- 对于列表查询,返回的默认对象数为 100。您可以通过设置 limit 参数来覆盖此行为。
这就是生成表格的原因。如果您想将 API 连接到现有表,这就是 AWS 所说的[Ref.]:
您可以让 AWS AppSync 代表您预置 DynamoDB 资源。或者,如果您愿意,可以通过创建数据源和解析器将现有表连接到 GraphQL 架构。
话虽如此,如果您@model
从 中删除指令type
,则必须自己定义数据源、查询、突变及其各自的解析器。
回到关于如何将现有 DynamoDB 表连接到 GraphQL API 的问题,您有以下选择。
- 在您的 Amplify 项目中添加 AppSync 数据源。
- 对于现有 API,您可以使用 AWS AppSync 控制台创建数据源。
- 此外,对于现有 API,您可以使用 Amplify CLI 创建数据源。
放大项目/GraphQL 转换:
例如,在您的Resources
API 目录的堆栈块中,您可以将数据源定义为:
"DynamoDBDataSource": {
"Type":"AWS::AppSync::DataSource",
"Properties":{
"ApiId":{
"Ref":"<YOUR API ID>"
},
"Name":"DynamoDbDataSource",
"Type":"AMAZON_DYNAMODB",
"ServiceRoleArn":"<SERVICE ROLE ARN>",
"DynamoDBConfig":{
"AwsRegion":"<DYNAMODB REGION>",
"TableName":"Planet"
}
}
}
使用控制台的数据源: 这可能需要您拥有额外的权限,但除此之外,这非常简单。这是他们官方指南的链接。
使用 CLI 的数据源: 由于您使用的是 Amplify,以下是如何使用 CLI 添加数据源的示例。{参考。}
aws appsync create-data-source --api-id <YOUR API ID> --name <NAME OF YOUR DATASOURCE>
--type AMAZON_DYNAMODB --dynamodb-config <PLAIN JSON AS ABOVE OR LOCATION TO YOUR JSON CONFIG FILE>
--service-role-arn <ARN OF YOUR IAM ROLE> --profile default
整理好数据源后,您可以创建解析器并将其映射到您的查询和突变,您可以在此链接上找到很好的文档。
推荐阅读
- iot - IoT 代理配置
- python - 是否可以循环 10^8 种可能性来确定正确答案?
- java - 配置问题:找不到 XML 模式命名空间的 Spring NamespaceHandler
- node.js - 为 Node 模块导入 TS 类型
- angularjs - 带有引导崩溃的嵌套 ng-repeats,$index 和 ng-init 的问题
- javascript - 复制到剪贴板时如何添加新行
- javascript - 我想在 Object 中返回异步函数的值
- google-apps-script - 用户无权调用 showModalDialog()
- hive - 使用 sqoop 将数据从 CSV 导入 Avro 表的命令
- android - Android - 运行时的 Dagger 注入