Go beh API Gateway 中的 AWS Lambda:自定义错误消息

r03*_*r03 3 go aws-lambda aws-api-gateway

我正在尝试处理用 Go 编写的 Lambda 函数中的错误。
Lambda 由 API 网关触发。
当我回复200 时,我得到了正确的回复。
但是当我回复500代码时,我总是收到{"message": "Internal server error"}

这是代码的一部分:

func newErrReponse(message string) (events.APIGatewayProxyResponse, error) {
    return events.APIGatewayProxyResponse{
        Body:       message,
        StatusCode: 500,
    }, errors.New(message)
}

func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    return newErrReponse("some error")
}

func main() {
    lambda.Start(handleRequest)
}
Run Code Online (Sandbox Code Playgroud)

我期待“一些错误”,但我总是收到内部服务器错误。我在正文中尝试了 JSON,但这没有帮助。集成请求的类型为 LAMBDA_PROXY。那是默认的。

如何控制错误响应?

r03*_*r03 5

lambda 处理程序可以返回 2 个值。接口{}错误https :
//godoc.org/github.com/aws/aws-lambda-go/lambda

因为我使用 API 网关,接口类型为APIGatewayProxyResponsehttps : //godoc.org/github.com/aws/aws-lambda-go/events#APIGatewayProxyResponse

如果 Lambda 成功,API 网关将从 APIGatewayProxyResponse 返回值。

但是如果 Lambda 不成功,那么您将收到内部服务器错误。

如果您返回 nil 以外的错误,则 Lambda 失败。

当出现 panic() 或 os.Exit() 时,Lambda 也失败了。这意味着 log.Fatal 也会使 Lambda 失败。

以下是有关错误的更多信息:https :
//docs.aws.amazon.com/lambda/latest/dg/go-programming-model-errors.html

Lambda 在 CloudWatch 中记录恐慌(和其他输出)

  • 是的,使用身体。第二个返回参数(错误)应该为零。 (2认同)