1

在 aws appsync 中,我想打一个电话 (start_game(phrase:”foo”)),它将写入两个单独的 dynamodb 表(游戏和转弯)。我确信我可以使用 lambda 解析器来做到这一点,但希望避免额外的复杂性。

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

4

2 回答 2

3

到目前为止,实现这一点的唯一方法是使用 Lambda 解析器。

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

于 2018-02-14T00:18:57.037 回答
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)
    }
}
于 2018-04-17T11:27:48.240 回答