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

AWS AppSync Resolver Mapping Template Dynamic Key for DynamoDB

我正在尝试为 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" : {
    ...
  }
}

我在文档中看不到太多此类内容。任何指针将不胜感激。

谢谢

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

    "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

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