【问题标题】:AppSync BatchDeleteItem not executes properlyAppSync BatchDeleteItem 未正确执行
【发布时间】:2019-06-17 19:12:55
【问题描述】:

我正在使用 AppSync 开发 React Native 应用程序,以下是我解决问题的架构:

type JoineeDeletedConnection {
    items: [Joinee]
    nextToken: String
}
type Mutation {
    deleteJoinee(ids: [ID!]): [Joinee]
}

在解析器到deleteJoinee 的“请求映射模板”中,我有以下内容(遵循https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-batch.html 的教程):

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

{
    "version" : "2018-05-29",
    "operation" : "BatchDeleteItem",
    "tables" : {
        "JoineesTable": $util.toJson($ids)
    }
}

..并在解析器的“响应映射模板”中,

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

问题是,当我运行查询时,我得到了空结果,并且没有任何内容被删除到数据库中:

// calling the query
mutation DeleteJoinee {
  deleteJoinee(ids: ["xxxx", "xxxx"])
  {
      id
  }
}

// returns
{
  "data": {
    "deleteJoinee": [
      null
    ]
  }
}

【问题讨论】:

  • 您能否启用 cloudwatch 日志并发布您返回的内容
  • 我想我能够以某种方式启用 cloudwatch 日志,这是我的变异查询输出 - socrates.io/#DADKwr4。我想让您注意的一件事是,如果我将查询作为 id 解析器的单个删除来执行,那效果很好。
  • 它看起来像一个访问错误 - 但正如所说,当按 id 删除单个时,删除工作正常。

标签: amazon-dynamodb aws-appsync


【解决方案1】:

我终于能够解决这个难题,感谢here提到的答案为我指明了方向。

虽然,我注意到 JoineesTable 确实在 IAM“角色”部分具有受信任的实体/角色,但由于某种原因它无法正常工作。进一步研究,我注意到现有策略默认遵循actions

"Action": [
    "dynamodb:DeleteItem",
    "dynamodb:GetItem",
    "dynamodb:PutItem",
    "dynamodb:Query",
    "dynamodb:Scan",
    "dynamodb:UpdateItem"
]

一旦我在列表中添加了另外两个actions,事情就开始起作用了:

"dynamodb:BatchWriteItem",
"dynamodb:BatchGetItem"

感谢@Vasileios Lekakis 和@Ionut Trestian 参与此 appSync 任务)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多