在aws appsync中,我想进行一次调用(start_game(短语:“foo”)),这将写入两个单独的dynamodb表(gams和turn)。我确信我可以使用lambda解析器来做到这一点,但我希望避免额外的复杂性。
有没有办法在单个dynamodb变异中做两个putitem(到两个不同的表)?
答案 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)
}
}