sam local start-api go lambda 在 linux ubuntu 上返回 502“内部服务器错误”

问题描述


在本地运行 aws sam 应用程序时返回“内部服务器错误”。

我使用以下方法创建了 aws sam hello-world 示例:
sam init --runtime go1.x --name robertsamlocallyhelloworld

然后我使用以下方法在本地运行应用程序:

sam local start-api

然后:

curl 127.0.0.1:3000/hello

图像下载已开始,然后在一段时间后停止。

/hello 端点返回:502 "Internal server error"

我正在使用:
山姆·克里:1.15.0
码头工人:20.10.0

输出

Invoking hello-world (go1.x)<br>
Image was not found.<br>
Building image....................................<br>
Skip pulling image and use local one: amazon/aws-sam-cli-emulation-image-go1.x:rapid-1.15.0.<br>

Mounting /home/robert/projects/try_dir/try_sam_go_daemons/robertsamlocallyhelloworld/hello-world as /var/task:ro,delegated inside runtime container<br>
START RequestId: 159c8e80-649d-4c71-8b54-3221387af308 Version: $LATEST<br>
fork/exec /var/task/hello-world: no such file or directory: PathError<br>
null<br>
END RequestId: 159c8e80-649d-4c71-8b54-3221387af308<br>
REPORT RequestId: 159c8e80-649d-4c71-8b54-3221387af308  Init Duration: 0.38 ms  Duration: 9.30 ms   Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 128 MB <br>
Lambda returned empty body!<br>
Invalid lambda response received: Invalid API Gateway Response Keys: {'errorMessage','errorType'} in {'errorMessage': 'fork/exec /var/task/hello-world: no such file or directory','errorType': 'PathError'}<br>
2021-01-11 23:55:41 127.0.0.1 - - [11/Jan/2021 23:55:41] "GET /hello HTTP/1.1" 502 <br>
2021-01-11 23:55:41 127.0.0.1 - - [11/Jan/2021 23:55:41] "GET /favicon.ico HTTP/1.1" 403 <br>

解决方法

错误信息明确指出:

Invalid API Gateway Response Keys

我遇到了类似的错误,我收到了响应 status_code 的错误:

Invalid lambda response received: Invalid API Gateway Response Keys: {'status_code'} in {'status_code': 200,'body': '"Success!!"'}

显然,SAM 试图模拟 API Gateway,而 status_code 不是 API Gateway 在响应中期望的键之一。因此我将其从 status_code 改为 statusCode

    return {
    'statusCode': 200,'body': json.dumps("Success!!")
}

而且,它运行良好。

我建议您查看 API Gateway 响应键并尝试将您的响应映​​射到该键。