сообщение: "Внутренняя ошибка сервера" при попытке доступа к aws-шлюзу api
Созданная функция Lambda Hello world с использованием Node.js и созданный триггер API GateWay для вызова Get, попробовал URL-адрес для доступа к функции Lambda, получив ниже ошибки.
сообщение: "Внутренняя ошибка сервера".
(очень новый для AWS)
Ответы
Ответ 1
Вам необходимо передать 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'}
});
Ответ 2
Не забудьте развернуть API под AWS API Gateway. Без этого изменение не работает.
Ответ 3
У меня была эта проблема, но в моем случае я использовал 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;
Это работает
Ответ 4
Эта ошибка указывает на то, что возникла проблема с конфигурацией API. Если вы включите журналы CloudWatch, вы можете увидеть дополнительную информацию: https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cloudwatch-logs/
Ответ 5
У меня возникла проблема с использованием API Gateway + Lambda. В моем случае проблема была просто проблемой разрешения. Я использовал этапы своего API.
Мне пришлось выполнить
aws lambda add-permission --function-name X --source-arn "X" --principal apigateway.amazonaws.com --statement-id X --action lambda:InvokeFunction
Надеюсь это поможет.
Ответ 6
Это уже объяснялось выше, но моя проблема заключалась в том, что это сработало для меня, просто вызвав лямбду:
exports.handler = async (event) => {
return "gugus"
};
Так что все тесты в лямбде были в порядке. Бревна тоже выглядели хорошо. Просто ответ API был не в порядке.
Чтобы вызвать его с помощью шлюза API, нужно что-то вроде этого:
exports.handler = async (event) => {
...
var res ={
"statusCode": 200,
"headers": {
"Content-Type": "*/*"
}
};
res.body = "gugus";
return res;
};
Ответ 7
Обязательно передайте тело в виде строки в ответе. Если это объект, он потерпит неудачу и выдаст вам ошибку, которую вы видите. Смотрите здесь для получения дополнительной информации - http://www.awslessons.com/2017/lambda-api-gateway-internal-server-error/