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

Aws appsync: possible to do two putitems in one request with a dynamodb resolver?

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

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

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

话虽如此,我们已经从几个客户那里听到了支持此用例的请求,并将其视为支持的 +1!

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

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

#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)
    }
}

两个 table 看起来很相似:

## 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)
    }
}