我正在尝试处理用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。那是默认的。
如何控制错误响应?
答案 0 :(得分:3)
lambda处理程序可以返回2个值。 界面{} 和错误:
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中记录恐慌(和其他输出)