首页 > 解决方案 > 添加 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”。

标签: reactjsgraphqlamazon-dynamodbaws-amplifyaws-appsync

解决方案


根据 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 转换:

例如,在您的ResourcesAPI 目录的堆栈块中,您可以将数据源定义为:

"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

整理好数据源后,您可以创建解析器并将其映射到您的查询和突变,您可以在此链接上找到很好的文档。


推荐阅读