Созданная функция Lambda Hello world с использованием Node.js и созданный триггер API GateWay для вызова Get, попробовал URL-адрес для доступа к функции Lambda, получив ниже ошибки.
сообщение: "Внутренняя ошибка сервера".
(очень новый для AWS)
Созданная функция Lambda Hello world с использованием Node.js и созданный триггер API GateWay для вызова Get, попробовал URL-адрес для доступа к функции Lambda, получив ниже ошибки.
сообщение: "Внутренняя ошибка сервера".
(очень новый для AWS)
Вам необходимо передать statusCode
после выполнения функции Lambda. Если вы его не пройдете, API 502 Bad Gateway
по умолчанию вызовет ошибку 502 Bad Gateway
.
message = {
'message': 'Execution started successfully!'
}
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(message)
}
EDIT: этот образец предназначен для Python. Для node.js вам просто нужно обработать обратный вызов, сообщение в основном то же самое.
callback(null, {
statusCode: 200,
body: JSON.stringify(message),
headers: {'Content-Type': 'application/json'}
});
Не забудьте развернуть API под AWS API Gateway. Без этого изменение не работает.
У меня была эта проблема, но в моем случае я использовал API Gateway и java лямбда-функцию. Когда вы смотрели в cloudwatch, ошибок не было, все выглядело отлично. Проблема возникает, когда API-шлюз пытается отобразить ответ. В моем случае, у меня в объекте ответа, statusCode, который не был int, в то время как шлюз API должен быть int.
это
private final ResponseCode statusCode;
private final String body;
private final Map<String, String> headers;
private final boolean isBase64Encoded;
После того, как я изменил statusCode на int
private final int statusCode;
Это работает
Эта ошибка указывает на то, что возникла проблема с конфигурацией API. Если вы включите журналы CloudWatch, вы можете увидеть дополнительную информацию: https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cloudwatch-logs/
У меня возникла проблема с использованием API Gateway + Lambda. В моем случае проблема была просто проблемой разрешения. Я использовал этапы своего API.
Мне пришлось выполнить
aws lambda add-permission --function-name X --source-arn "X" --principal apigateway.amazonaws.com --statement-id X --action lambda:InvokeFunction
Надеюсь это поможет.
Это уже объяснялось выше, но моя проблема заключалась в том, что это сработало для меня, просто вызвав лямбду:
exports.handler = async (event) => {
return "gugus"
};
Так что все тесты в лямбде были в порядке. Бревна тоже выглядели хорошо. Просто ответ API был не в порядке.
Чтобы вызвать его с помощью шлюза API, нужно что-то вроде этого:
exports.handler = async (event) => {
...
var res ={
"statusCode": 200,
"headers": {
"Content-Type": "*/*"
}
};
res.body = "gugus";
return res;
};
Обязательно передайте тело в виде строки в ответе. Если это объект, он потерпит неудачу и выдаст вам ошибку, которую вы видите. Смотрите здесь для получения дополнительной информации - http://www.awslessons.com/2017/lambda-api-gateway-internal-server-error/