use*_*308 18 aws-lambda aws-api-gateway
使用Node.js创建了Lambda Hello world函数,并为Get调用创建了API GateWay触发器,尝试使用URL访问Lambda函数,得到以下错误.
消息:"内部服务器错误".
(AWS新手)
ljm*_*cic 30
您需要statusCode在执行Lambda函数后传递.如果您未通过它,API网关将502 Bad Gateway默认触发错误.
message = {
'message': 'Execution started successfully!'
}
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(message)
}
Run Code Online (Sandbox Code Playgroud)
编辑:此示例适用于Python.对于node.js,您只需要处理回调,消息基本相同.
callback(null, {
statusCode: 200,
body: JSON.stringify(message),
headers: {'Content-Type': 'application/json'}
});
Run Code Online (Sandbox Code Playgroud)
小智 13
要通过 api 网关的 lambda 函数访问 dynamodb,需要:
在 AWS 控制台中创建一个有权访问 dynamodb 操作的角色。
创建一个 lambda 函数并将上面创建的角色分配给您的 lambda 函数。
在 AWS 管理控制台中从 API 网关创建一个 api,并允许它访问您的 lambda 函数。
为了让你的 api 显示正确的响应,lambda 函数的返回类型应该是特定的格式,即:
return {
"statusCode": 200,
"body": json.dumps(your response)
}
Run Code Online (Sandbox Code Playgroud)
上面已经解释过,但我的问题是这对我来说只需调用 lambda:
exports.handler = async (event) => {
return "gugus"
};
Run Code Online (Sandbox Code Playgroud)
所以 lambda 中的所有测试都很好。日志看起来也很好。只是 API 响应不太好。
要使用 API 网关调用它,需要如下所示:
exports.handler = async (event) => {
...
var res ={
"statusCode": 200,
"headers": {
"Content-Type": "*/*"
}
};
res.body = "gugus";
return res;
};
Run Code Online (Sandbox Code Playgroud)
请务必将正文作为响应中的字符串传递。如果它是一个对象,它将失败并给出您看到的错误。请参阅此处了解更多信息 - http://www.awslessons.com/2017/lambda-api-gateway-internal-server-error/
不要伪造在AWS API Gateway下部署API。没有它,改变就行不通。
此错误表明 API 配置存在问题。如果启用 CloudWatch Logs,您可以看到更多信息:https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cloudwatch-logs/
| 归档时间: |
|
| 查看次数: |
15225 次 |
| 最近记录: |