AppSync BatchDeleteItem не выполняется должным образом - PullRequest
0 голосов
/ 24 января 2019

Я работаю над приложением React Native с AppSync, и вот моя схема этой проблемы:

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
    ]
  }
}

1 Ответ

0 голосов
/ 25 января 2019

Я наконец-то смог решить эту загадку, благодаря ответу, упомянутому здесь , чтобы указать мне какое-то направление.

Хотя я заметил, что 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 в этом приложении квест Sync)

...