1

我无法在应用同步中执行批量获取。这是我的以下解析器。

请求映射模板。

#set($ids = [])
#foreach($id in ${ctx.args.topicIds})
   #set($map = {})
   $util.qr($map.put("topicId", $util.dynamodb.toString($id)))
   $util.qr($ids.add($map))
#end

{
 "version" : "2018-05-29",
 "operation" : "BatchGetItem",
 "tables" : {
    "Topic": {
        "keys": $util.toJson($ids),
        "consistentRead": true
    }
 }
}

响应映射模板

$util.toJson($ctx.result.data.Topic)

这就是我给出查询的方式

 query listStudentBookmarkedTopics {
   listStudentBookmarkedTopics(
     topicIds: [ "503", "501" ]
   ) {
     topicId
   }
 }

但我得到空结果

 {
  "data": {
    "listStudentBookmarkedTopics": [
      null,
      null
    ] 
  }
}

这就是我的桌子的样子

在此处输入图像描述

这是云观察日志

在此处输入图像描述

4

2 回答 2

1

我有一个类似的问题。通过应用适当的权限来修复它。如果您创建了新的 IAM 角色,默认情况下它不会授予batch*权限。来自 AWS 文档:

与其他解析程序一样,您需要在 AWS AppSync 中创建数据源,然后创建角色或使用现有角色。由于批处理操作需要对 DynamoDB 表的不同权限,因此您需要授予配置的角色权限以进行读取或写入操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "dynamodb:BatchGetItem",
        "dynamodb:BatchWriteItem"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:dynamodb:region:account:table/TABLENAME",
        "arn:aws:dynamodb:region:account:table/TABLENAME/*"
      ]
    }
  ]
}

您可以附加新策略,也可以仅"dynamodb:BatchGetItem"在 IAM 仪表板中添加现有策略。`

于 2018-08-13T06:59:26.383 回答
0

您的 DynamoDB 表是什么样的?是Topic表名吗?上面定义的主分区键是什么?我需要更多详细信息来帮助您解决此问题。

或者,请为您的 API 打开 CloudWatch 日志(您应该可以通过控制台 -> 在您的 API 的设置页面下执行此操作)。尝试再次运行您的查询,并查看此路径的已解析请求和响应模板是什么。那应该为您提供更多详细信息。

于 2018-05-29T02:28:27.877 回答