适用于DynamoDB的AWS AppSync解析器映射模板动态密钥

时间:2020-06-28 23:26:04

标签: amazon-dynamodb velocity aws-appsync

我正在尝试为DynamoDB'putItem'调用创建动态密钥。我当前使用的(非动态)解析器映射模板是

{
  "version" : "2017-02-28",
  "operation" : "PutItem",
  "key" : {
    "userId1" : { "S" : "${context.identity.sub}" },
    "userId2" : { "S" : "${context.stash.userId2}" },
  },
  "attributeValues" : {
   ...
  }
}

我正在尝试使关键部分动态化,这是我尝试过的其中一项尝试,但无效:

{
  "version" : "2017-02-28",
  "operation" : "PutItem",
  #set($key={})
  #set($keyValue1={})
  #set($keyValue2={})
  $keyValue1.put("S", ${context.identity.sub})
  $keyValue2.put("S", ${context.stash.userId2})
  $util.qr($key.put("userId1", $keyValue1))
  $util.qr($key.put("userId2", $keyValue2))

  "key" : $util.toJson($key),
  "attributeValues" : {
    ...
  }
}

我在文档中看不到这种类型的东西。任何指针将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

我找到了一个我想分享的解决方案。

    "version" : "2017-02-28",
    "operation" : "PutItem",

    #set($key={})

    #set($key.userId1= $util.dynamodb.toString("${context.identity.sub}"))

    #if(!$ctx.prev.result.items.isEmpty()) ## My condition is based on result from previous template
      #set($key.userId2 = $util.dynamodb.toString("${ctx.prev.result.items[0].userId}"))
    #else
      #set($key.userId2 = $util.dynamodb.toString("${context.stash.anotherValue}"))
    #end

    "key" : $util.toJson($key), ## convert map/object to JSON and set the 'key' for use in the DynamoDB request

希望这对以后的人有所帮助:)