消息:尝试访问aws网关api时出现“内部服务器错误”

时间:2017-12-06 10:45:43

标签: aws-lambda aws-api-gateway

使用Node.js创建Lambda Hello world函数并为Get调用创建API GateWay触发器,尝试使用URL访问Lambda函数,得到以下错误。

消息:“内部服务器错误”。

(非常新的AWS)

10 个答案:

答案 0 :(得分:26)

执行Lambda函数后需要传递statusCode。如果您未通过,API网关默认会触发错误502 Bad Gateway

message = {
   'message': 'Execution started successfully!'
}
return {
    'statusCode': 200,
    'headers': {'Content-Type': 'application/json'},
    'body': json.dumps(message)
}

编辑:此示例适用于Python。对于node.js,您只需要处理回调,消息基本相同。

callback(null, {
    statusCode: 200,
    body: JSON.stringify(message),
    headers: {'Content-Type': 'application/json'}
});

答案 1 :(得分:1)

不要伪造在AWS API Gateway下部署API。没有它,更改将不起作用。

enter image description here

答案 2 :(得分:0)

此错误表示API的配置存在问题。如果启用CloudWatch Logs,您可以查看更多信息:https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cloudwatch-logs/

答案 3 :(得分:0)

我有这个问题,但在我的情况下,我使用的是API网关和java lambda函数。在查看cloudwatch时没有错误,每件事情看起来都很好。当API Gateway尝试呈现响应时,会发生此问题。 在我的情况下,我在我的响应对象中,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 :(得分:0)

我使用API​​ Gateway + Lambda遇到了这个问题。就我而言,问题只是一个许可问题。我在我的API中使用了阶段。

我必须执行

TRANSAZERROR.DATA

希望这有帮助。

答案 5 :(得分:0)

上面已经进行了解释,但是我的问题是,仅通过调用lambda就可以为我工作:

exports.handler = async (event) => {
    return "gugus"
};

因此,所有在lambda中的测试都很好。日志看起来也不错。只是API响应不正确。

要使用API​​网关调用它,它需要如下所示:

exports.handler = async (event) => {
...
    var res ={
        "statusCode": 200,
        "headers": {
            "Content-Type": "*/*"
        }
    };
    res.body = "gugus";
    return res;
};

答案 6 :(得分:0)

请确保在响应中以字符串形式传递正文。如果它是一个对象,它将失败并给您看到的错误。有关更多信息,请参见此处-http://www.awslessons.com/2017/lambda-api-gateway-internal-server-error/

答案 7 :(得分:0)

要通过lambda函数从api网关访问dynamodb,需要:

  1. 在AWS控制台中创建一个可以访问dynamodb操作的角色。

  2. 创建一个lambda函数,并将上面创建的角色分配给您的lambda函数。

  3. 在AWS管理控制台中从API网关创建一个api,并允许其访问您的lambda函数。

  4. 为使您的api显示正确的响应,lambda函数的返回类型应为特定格式,即:

    return {
          "statusCode" : 200,
          "body"       : json.dumps(your response)
          }

答案 8 :(得分:0)

在我的情况下,标题的拼写错误,它是 'header' 代替了 'headers' >,因此请确保您具有正确的JSON响应正文。

答案 9 :(得分:0)

callback(null, {
    statusCode: 200,
    body: JSON.stringify(message),
    headers: {'Content-Type': 'application/json'}
});

这对我来说非常有效