У меня есть функция Lambda, которая отлично работает при прямом выполнении. Поскольку на данный момент это только для тестирования, он только читает запрос body и возвращает значение одного из дочерних элементов в ответ:
exports.handler = async (event) => {
const response = {
"isBase64Encoded": false,
"headers": {
"Content-Type": "application/json"
},
"statusCode": 200,
"body": event.body.maxNumber
};
return response;
};
Однако когда я создаю из него Api с помощью AWS Api Gateway, происходит странное поведение. Если функция Lambda содержит приведенный выше код, тело ответа просто пусто. Однако, если вместо дочернего элемента (в данном случае maxNumber) я изменю ответ, чтобы вернуть все тело запроса, он вернет его.
В любом случае, хотя лямбда-функция отлично работает изолированно, когда за API-шлюзом кажется, что она не может видеть дочерние элементы тела запроса.
Я создал API-интерфейсы HTTP и REST как с включенным прокси, так и без него, и мне не повезло. Также не могу найти какую-либо документацию, в которой конкретно взяты образцы чего-то вроде моего случая (тела запроса). Любая помощь будет принята с благодарностью.
Уже пробовал. Это не то :(
Включите лямбда-прокси для своего шлюза api, затем получите тело через JSON.parse(event.body)
Я думаю, что здесь уже был дан ответ на аналогичный вопрос: stackoverflow.com/questions/41648467/…





Для ответа прокси-сервера api Gateway тело должно быть строкой.
Сначала вам нужно проанализировать тело запроса, чтобы получить объект json, а внутри ответа вам нужно упростить тело ответа, как указано ниже:
const body = JSON.parse(event.body);
const response = {
"isBase64Encoded": false,
"headers": {
"Content-Type": "application/json"
},
"statusCode": 200,
"body": JSON.stringify(body.maxNumber)
};
return response;
если вы используете REST Api с прокси, нам нужно сначала проанализировать его
JSON.parse(event.body), потому что тело ввода будет отправлено лямбда в виде строки. затем получить доступ к его атрибутам.