Aws appsync:可以使用dynamodb解析器在一个请求中做两个putitems吗?

时间:2018-02-12 07:04:29

标签: amazon-dynamodb aws-appsync

在aws appsync中,我想进行一次调用(start_game(短语:“foo”)),这将写入两个单独的dynamodb表(gams和turn)。我确信我可以使用lambda解析器来做到这一点,但我希望避免额外的复杂性。

有没有办法在单个dynamodb变异中做两个putitem(到两个不同的表)?

2 个答案:

答案 0 :(得分:3)

截至目前,实现此目标的唯一方法是使用Lambda解析器。

话虽如此,我们听到了几个客户支持此用例的请求,并将此作为+1来支持它!

答案 1 :(得分:3)

现已通过Batch Resolver功能将其添加到AWS AppSync中。您可以在此处查看教程:https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-batch.html

对于此特定问题,您可以使用BatchPutItem将多个项目写入一个或多个表格。您可以通过解析程序中的tables键执行此操作。对于一个表,它看起来像这样:

#set($postsdata = [])
#foreach($item in ${ctx.args.posts})
    $util.qr($postsdata.add($util.dynamodb.toMapValues($item)))
#end

{
    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : {
        "Posts": $utils.toJson($postsdata)
    }
}

对于两张表,它看起来很相似:

## Convert tempReadings arguments to DynamoDB objects
#set($tempReadings = [])
#foreach($reading in ${ctx.args.tempReadings})
    $util.qr($tempReadings.add($util.dynamodb.toMapValues($reading)))
#end

## Convert locReadings arguments to DynamoDB objects
#set($locReadings = [])
#foreach($reading in ${ctx.args.locReadings})
    $util.qr($locReadings.add($util.dynamodb.toMapValues($reading)))
#end

{
    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : {
        "locationReadings": $utils.toJson($locReadings),
        "temperatureReadings": $utils.toJson($tempReadings)
    }
}