AWS Lambda in Go支持API网关:自定义错误消息

问题描述 投票:3回答:1

我正在尝试处理用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)
}

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

如何控制错误响应?

go aws-lambda aws-api-gateway
1个回答
3
投票

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

因为我使用API​​网关,所以接口的类型为APIGatewayProxyResponse: https://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中记录恐慌(和其他输出)

© www.soinside.com 2019 - 2024. All rights reserved.