Функция просто вставляет новый столбец в таблицу DynamoDB. Я могу проверить, работает ли он, нажав кнопку «тест» на вкладке лямбда-функции (она отвечает 200
), но она возвращает ошибку, когда я присоединяю его к POST-запросу шлюза API, используя «тест» Кнопка также, в этом случае кнопка тестирования на вкладке теста метода API-шлюза.
Это ошибки:
Тело ответа
{"message": "Внутренняя ошибка сервера"}
Заголовки ответа
{"x-amzn-ErrorType":"InternalServerErrorException"}
Журналы
Lambda execution failed with status 200 due to customer function error: One or more parameter values were invalid: Missing the key site in the item.
Вот код лямбда-функции:
function response( message) {
return message
}
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-2'});
exports.handler = function(event, context) {
let scanningParameters = {
Item: {
"site":event.site
},
TableName: 'Galleries'
}
return docClient
.put(scanningParameters)
.promise()
.then(() => {
return {
"statusCode": 200,
'headers': { 'Content-Type': 'application/json' }
}
})
}
Однако я не понимаю, почему запрашивает ключ, поскольку на лямбда-вкладке он правильно вставляет столбец в таблицу. Вот еще одна функция, которая работает и в API Gateway, и схема абсолютно такая же:
function response( message) {
return message
}
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-2'});
exports.handler = function(event, context) {
let scanningParameters = {
Item: {
"email":event.email
},
TableName: 'Users'
}
return docClient
.put(scanningParameters)
.promise()
.then(() => {
return {
"statusCode": 200,
'headers': { 'Content-Type': 'application/json' }
}
})
}
Редактировать: Я только что решил эту проблему, сняв флажок «Использовать интеграцию с Lambda Proxy» на вкладке запроса интеграции