Проблема шаблона сопоставления тела Dynamodb для шлюза Amazon Api для BatchWriteItem(vtl - язык шаблонов скорости)
Я работаю над API-шлюзом на сервисах aws, которые выполняют операцию BatchWriteItem для DynamoDB. Но я знаю, что для одной операции BatchWrite существует максимум 25 позиций. Я новичок в vtl и не знаю, как обрабатывать запросы, в которых более 25 предметов. Я записываю свой текущий шаблон тела.
Любые советы или помощь будут оценены. Благодарю.
Body Mapping Template:
#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 ответ
Независимо от того, что вы делаете в своем шаблоне скорости, API Gateway по-прежнему будет вызывать интеграцию AWS только один раз. В принципе, не существует способа выполнить несколько внутренних вызовов интеграции для обработки одного вызова API-шлюза. (Хотя мы можем рассмотреть возможность добавления этой функции в будущем.)
Если вам нужно поместить более 25 элементов, я рекомендую, чтобы ваш клиент просматривал элементы и делал отдельный вызов вашего API для каждых 25 элементов.