【问题标题】:AppSync batch insert to DynamoDB fails and returns nullAppSync 批量插入到 DynamoDB 失败并返回 null
【发布时间】:2019-01-02 12:48:55
【问题描述】:

我有以下解析器设置:

#set($questions = [])
#foreach($item in ${ctx.args.questions})
    #set($item.id = $util.dynamodb.toDynamoDBJson($util.autoId()))
    $util.qr($questions.add($util.dynamodb.toMapValues($item)))
#end
{
    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : {
        "QuestionTable": $utils.toJson($questions)
    }
}

以及以下 GraphQL 架构:

input CreateQuestionInput {
    text: String
    sectionId: ID!
}

input CreateScoreInput {
    score: Int!
    questionId: ID!
    userId: ID!
}

input CreateSectionInput {
    title: String
    subSection: String
}

input DeleteQuestionInput {
    id: ID!
}

input DeleteScoreInput {
    id: ID!
}

input DeleteSectionInput {
    id: ID!
}

type Mutation {
    ...
    createQuestion(input: CreateQuestionInput!): Question
    batchCreateQuestion(questions: [CreateQuestionInput]!): [Question]

}

type Query {
    getSection(id: ID!): Section
    listSections(filter: TableSectionFilterInput, limit: Int, nextToken: String): SectionConnection
    getScore(id: ID!): Score
    listScores(filter: TableScoreFilterInput, limit: Int, nextToken: String): ScoreConnection
    getQuestion(id: ID!): Question
    listQuestions(filter: TableQuestionFilterInput, limit: Int, nextToken: String): QuestionConnection
}

type Question {
    id: ID!
    text: String
    sectionId: ID!
}

type QuestionConnection {
    items: [Question]
    nextToken: String
}

type Schema {
    query: Query
}

type Score {
    id: ID!
    score: Int!
    questionId: ID!
    userId: ID!
}

type ScoreConnection {
    items: [Score]
    nextToken: String
}

type Section {
    id: ID!
    title: String
    subSection: String
    questions: [Question]
}

type SectionConnection {
    items: [Section]
    nextToken: String
}

input TableQuestionFilterInput {
    id: TableIDFilterInput
    text: TableStringFilterInput
    sectionId: TableIDFilterInput
}

input UpdateQuestionInput {
    id: ID!
    text: String
    sectionId: ID
}

(我已经编辑了一些架构,因为它相当大)。

当我尝试运行查询时:

mutation BatchCreateQuestions($sec: ID!) {
  batchCreateQuestion(questions: [
    {
      text: "Tester 1"
      sectionId: $sec
    },
    {
      text: "Tester 2",
      sectionId: $sec
    }
  ]) {
    id
    text
    sectionId
  }
}

使用变量:

{ "sec": "abc123" }

我得到了回应:

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

当我检查 DynamoDB 表时,它没有保存值。我已经为此数据源授予了完整的 dynamodb 权限,但仍然没有任何乐趣。

【问题讨论】:

  • 它的最终答案是什么?我被卡住了

标签: amazon-dynamodb graphql aws-appsync


【解决方案1】:

事实证明,我将批量写入权限授予了一个名称相似的角色,而不是影响此数据源的角色。如果您看到类似问题,请检查您的 IAM 角色/权限。傻我。

【讨论】:

【解决方案2】:

您的响应模板在解析器中是什么样的?它应该是$util.toJson($ctx.result.data.QuestionTable),基于上面的表名QuestionTable,因为它会自动转换为响应上下文。

【讨论】:

  • 它是$util.toJson($ctx.result.data.QuestionTable)
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 2017-08-23
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多