本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
附加数据源
(推荐)自动预配置
继续从设计您的架构,你可以有AmazonAppSync 根据您的架构定义自动创建表。这是一个可选步骤,但如果你刚刚开始,建议采取步骤。Amazon在此过程中,AppSync 还会为您创建所有解析程序,您可立即编写 GraphQL 查询、更改和订阅。您可以在(可选)根据架构预置中了解相关内容。本教程的其余部分假设您会跳过自动预配置过程,从头构建。
添加数据源
现在你在AmazonAppSync 控制台并保存了它,您可以添加数据源。上一节中的架构假设您拥有一个名为的 Amazon DynamoDB 表Todos用主键id的类型字符串. 您可以在 Amazon DynamoDB 控制台中手动创建它,也可以使用以下内容。Amazon CloudFormation堆栈:
添加数据源
-
在控制台中选择数据源选项卡,然后选择新建。
-
为您的数据源取个好记的名称,如
TodosTable。
-
-
选择 Amazon DynamoDB 表作为类型。
-
选择适当的区域。
-
-
选择您的 Todos 表。然后创建新角色(推荐)或选择现有角色,现有角色需拥有 IAM 权限
PutItem然后扫描你的桌子。现有角色需要下文中说明的信任策略。 -
如果您有现有表,还可以通过选择自动生成 GraphQL 来自动创建 CRUD、List 和 Query 操作,如(可选)从 Amazon DynamoDB 导入中所述,但在本教程中不要选择它。
如果您没有学习本教程中有关架构使用分页和关系(具有 GraphQL 连接)的高级部分,您可以直接转到配置解析程序。
如果您正在完成包括分页和关系的高级部分,需要使用名为 Comments、主键为 todoid 且排序键为 commentid(两个键的类型均为 String)的表重复以上流程。另外,必须在名为 todoid-index、分区键为 todoid 且类型为 String 的表中创建全局二级索引。您可以在 Amazon DynamoDB 控制台中手动创建它,也可以使用以下内容。Amazon CloudFormation堆栈:
您需要针对 Comments 表进行 code:PutItem 和 code:Query 的 IAM 权限。我们建议您如上文所示使用创建新角色。
现在,您已连接了数据源,可以利用解析程序将它与您的架构连接。请继续阅读配置解析程序。
IAM 信任策略
如果您针对数据源使用现有 IAM 角色,则需要为该角色授予适当的权限,以便针对您的Amazon资源,例如PutItem在 Amazon DynamoDB 表上。您还需要修改该角色的信任策略以允许AmazonAppSync 用于资源访问,如以下示例策略所示:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
您还可以向信任策略添加条件,以根据需要限制对数据源的访问。目前,SourceArn和SourceAccount在这些条件下,可以使用密钥。例如,以下策略限制对账户对数据源的访问。123456789012:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "appsync.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } } ] }
有关跨账户访问的更多信息Amazon Lambda针对解析程序AmazonAppSync,请参阅构建跨账户Amazon Lambda针对解析程序AmazonAppSync
或者,您可以将对数据源的访问限制为特定 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" } } } ] }
您可以限制对所有Amazon来自特定区域的 AppSync API,例如us-east-1,使用以下策略:
{ "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/*" } } } ] }