BatchWriteItem的Amazon Api Gateway Dynamodb Body映射模板问题(vtl - velocity template language)

时间:2017-03-15 07:46:08

标签: amazon-web-services amazon-dynamodb aws-api-gateway vtl

我在aws服务上工作api网关,它对dynamodb执行BatchWriteItem操作。但我知道一个BatchWrite操作最多有25个put项限制。我是vtl的新手,我不知道如何处理超过25个放置项目的请求。我写下我目前的身体模板。

任何提示或帮助将不胜感激。感谢。

身体映射模板:

#set($inputRoot = $input.path('$'))
{
    "RequestItems": {
        "SensorDataTest": [
         #foreach($elem in $inputRoot.sensorMessages)
         { 
            "PutRequest": 
                {
                "Item": 
                    {
                    "GatewayID": 
                         {
                            "N": "$inputRoot.gatewayMessage.gatewayID"
                         },
                        "SensorID": {
                            "N": "$elem.sensorID"
                         },
                        "SensorName": {
                            "S": "$elem.sensorName"
                         },
                        "ApplicationID": {
                            "N":"$elem.applicationID" 
                        },
                        "NetworkID": {
                            "S":"$elem.networkID"
                        },
                        "DataMessageGUID": {
                            "S":"$elem.dataMessageGUID" 
                        },
                         "MessageDate": {
                            "S":"$elem.messageDate" 
                        },
                        "State": {
                             "N":"$elem.state" 
                        },
                        "RawData": {
                            "S": "$elem.rawData"
                        },
                        "DataType": {
                            "S": "$elem.dataType"
                        },
                        "DataValue": {
                            "S": "$elem.dataValue"
                        },
                        "PlotValues": {
                            "S": "$elem.plotValues"
                        },
                        "PlotLabels": {
                            "S": "$elem.plotLabels"
                        },
                        "SignalStrength": {
                            "N":"$elem.signalStrength"
                        },
                        "BatteryLevel": {
                            "N": "$elem.batteryLevel"
                        },
                        "PendingChange": {
                            "S": "$elem.pendingChange"
                        }
                    }
                }
        }#if($foreach.hasNext),#end
         #end
           
        ]
    },
    "ReturnConsumedCapacity": "TOTAL"
}

1 个答案:

答案 0 :(得分:1)

无论您在速度模板中执行什么操作,API网关仍然只会调用AWS集成一次。按照设计,无法进行多个后端集成调用来处理单个API网关调用。 (虽然我们可能会考虑将来添加此功能。)

如果您需要放置超过25个项目,我建议您让客户循环浏览这些项目,并为每25个项目单独调用您的API。