附加数据源 - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

附加数据源

数据源是您Amazon账户中的资源,GraphQL API 可以与之交互。Amazon AppSync 支持Amazon Lambda Amazon DynamoDB、关系数据库(Amazon Aurora Serverless)、亚马逊 OpenSearch 服务和 HTTP 终端节点作为数据源。Amazon AppSync API 可以配置为与多个数据源交互,使您能够在单个位置聚合数据。Amazon AppSync 可以使用您账户中已经存在Amazon的资源,也可以通过架构定义代表您预置 DynamoDB 表。

以下部分将向您展示如何将数据源附加到 GraphQL API。

继续从 “设计您的架构” 开始,Amazon AppSync 可以根据您的架构定义自动创建表。这是一个可选步骤,但如果您刚刚入门,则建议您执行此步骤。Amazon AppSync 还可以在此过程中为您创建所有解析器,您可以立即编写 GraphQL 查询、变更和订阅。您可以在 “从架构配置”(可选)中遵循此流程。本教程的其余部分假设您会跳过自动预配置过程,从头构建。

添加数据源

现在您已经在Amazon AppSync 控制台中创建并保存了架构,可以添加数据源了。上一节中的架构假设您有一个名为 Amazon DynamoDB 的表,Todos其主键名为 id,类型为 String。您可以在 Amazon DynamoDB 控制台中手动创建此堆栈,也可以使用以下Amazon CloudFormation堆栈:

将您的数据源添加到 GraphQL API

  1. 登录 Amazon Web Services Management Console并打开 AppSync 控制台

    1. 边栏中,选择 “数据源”。

  2. 在控制台中选择 “数据源” 选项卡,然后选择 “创建数据源”。

    1. 为您的数据源取个好记的名称,如 TodosTable

  3. 在 “数据源类型” 下,选择 Amazon DynamoDB 表

  4. 选择相应的区域

  5. 选择您的 Todos 表。然后创建一个新角色(推荐),或者选择一个拥有 IAM 权限的现有角色PutItem并扫描您的表。

    注意

    现有角色需要信任策略。有关更多信息,请参阅 IAM 信任策略

  6. Amazon AppSync允许您启用版本控制,当多个客户端尝试同时更新数据时,版本控制可以在使用 DynamoDB 时为每个请求自动创建数据版本。版本控制用于保留和维护数据的多个变体,用于冲突检测和解决目的。您可以选择启用数据源版本控制,但在本教程中,请将其保留为未选中状态。

  7. 如果您有现有表,也可以通过选择 “自动生成 GraphQL” 来自动生成 CRUD 和Query操作,如(可选)从 Amazon DynamoDB 导入中所述。List本教程不会使用此功能,因此请不要将其选中。

  8. 选择 Create(创建)

  9. 如果您没有学习本教程中有关架构使用分页和关系(具有 GraphQL 连接)的高级部分,您可以直接转到配置解析程序

    但是,如果您要使用分页和关系实现高级部分,则需要使用一个名为主键为 t odo id 和排序键为Comments comment id 的表重复上述操作,其中两者的类型均为 String。另外,必须在名为 todoid-index、分区键为 todoid 且类型为 String 的表中创建全局二级索引。您可以在 Amazon DynamoDB 控制台中手动创建,也可以使用以下Amazon CloudFormation堆栈进行创建:

    1. 你需要在Comments表上使用 code: PutItem和 code: Query 的 IAM 权限。我们建议您如上文所示使用创建新角色

现在,您已连接了数据源,可以利用解析程序将它与您的架构连接。转到配置解析器

IAM 信任策略

如果您在数据源中使用现有 IAM 角色,则需要向该角色授予相应的权限,以便对您的Amazon资源(例如在 Amazon DynamoDB 表PutItem上执行操作)执行操作。您还需要修改该角色的信任策略,允许 Amazon AppSync 使用它进行资源访问,如以下示例策略所示:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

您还可以在信任策略中添加条件,以根据需要限制对数据源的访问。目前SourceArnSourceAccount密钥可以在这些条件下使用。例如,以下策略限制账户访问数据源123456789012

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }

或者,您可以将对数据源的访问限制为特定 API,例如abcdefghijklmnopq,使用以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:appsync:us-west-2:123456789012:apis/abcdefghijklmnopq" } } } ] }

例如,您可以使用以下策略限制对来自特定区域的us-east-1所有Amazon AppSync API 的访问:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:appsync:us-east-1:123456789012:apis/*" } } } ] }

有关角色策略配置的更多信息,请参阅 IAM 用户指南中的修改角色

有关Amazon Lambda解析器的跨账户访问权限的更多信息Amazon AppSync,请参阅为构建跨账户Amazon Lambda解析器Amazon AppSync