У меня есть простая функция лямбда, которая записывает элементы в таблицу DynamoDB. имя пользователя - это ключ раздела, createDateTime - это ключ сортировки.Функция AWS Lambda возвращает ошибку из API Gateway, но не при непосредственном вызове
Вызов этой функции из самой лямбда успешно вставляет элементы в таблицу. Однако при вызове через API шлюза, я получаю следующее сообщение об ошибке
{
"errorMessage": "Error putting order into dynamodb: MultipleValidationErrors: There were 14 validation errors:\n* InvalidParameterType: Expected params.Item['createDateTime'] to be a structure\n* UnexpectedParameter: Unexpected key '0' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '1' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '2' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '3' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '4' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '5' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '6' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '7' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '8' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '9' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '10' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '11' found in params.Item['createDateTime']\n* UnexpectedParameter: Unexpected key '12' found in params.Item['createDateTime']"
}
Я не понимаю, почему мой код работает, когда вызывается локально, но не при вызове через API шлюза? Код ниже:
var AWS = require("aws-sdk");
var DOC = require("dynamodb-doc");
AWS.config.update({region: "eu-west-1"});
var dynamodb = new DOC.DynamoDB();
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
var tableName = "MarketOrder";
if (event.http_method == 'POST') {
var datetime = new Date().getTime().toString();
dynamodb.putItem({
"TableName": tableName,
"Item" : {
"username" : event.username,
"createDateTime" : datetime,
"orderType": event.orderType,
"numberOfShares": event.numberOfShares,
"price": event.price,
"validToDate": event.validToDate
}
}, function(err, data) {
if (err) {
console.log("dynamodb error: " + err);
context.done('Error putting order into dynamodb: ' +err);
}
else {
console.log('great success: '+JSON.stringify(data, null, ' '));
context.succeed('Sucessfully saved market order');
}
});
}
....
} else {
context.fail('Invalid operation specified:' + event.http_method);
}
};
«Я не понимаю, почему мой код работает, когда вызывается локально, но не при вызове через API шлюза?» Кажется очевидным, что данные событий, передаваемые шлюзом API, отличаются от того, что вы тестировали напрямую. Я вижу, что вы регистрируете объект события в первой строке своей функции. Попробуйте сравнить журналы с прямым вызовом и вызовом шлюза API, и вы должны увидеть, в чем проблема. Возможно, вам потребуется изменить шаблон сопоставления API-шлюза. –