сообщение: "Внутренняя ошибка сервера" при попытке доступа к 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. Без этого изменение не работает.

enter image description here

Ответ 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;

Это работает

Ответ 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/