使用Node.js创建Lambda Hello world函数并为Get调用创建API GateWay触发器,尝试使用URL访问Lambda函数,得到以下错误。
消息:“内部服务器错误”。
(非常新的AWS)
答案 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)
答案 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,需要:
在AWS控制台中创建一个可以访问dynamodb操作的角色。
创建一个lambda函数,并将上面创建的角色分配给您的lambda函数。
在AWS管理控制台中从API网关创建一个api,并允许其访问您的lambda函数。
为使您的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'}
});
这对我来说非常有效