将基于 golang/docker 的 http api 部署到 aws lambda 时,您可能会遇到 apigatewayproxyrequest 中的路径属性为空的问题。发生这种情况是因为 lambda 函数正在从 api gateway http api (v2) 接收事件,与 rest api (v1) 相比,它使用不同的事件结构。
问题
apigatewayproxyrequest 是为较旧的 rest api 设计的,与 http api 一起使用时将导致空路径字段。解决方案是使用正确的事件结构:apigatewayv2httprequest.
解决方案
切换到使用 apigatewayv2httprequest 结构,其中包含 rawpath 字段以正确处理路由。
他们文档中的原始代码(不起作用):
package main
import (
"context"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(ctx context.context, event events.apigatewayproxyrequest) (events.apigatewayproxyresponse, error) {
response := events.apigatewayproxyresponse{
statuscode: 200,
body: "\"hello from lambda!\"",
}
return response, nil
}
func main() {
lambda.start(handler)
}
这是更新的 lambda 函数示例:
package main
import (
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(request events.APIGatewayV2HTTPRequest) (*events.APIGatewayV2HTTPResponse, error) {
if request.RawPath == "/health" {
return &events.APIGatewayV2HTTPResponse{
StatusCode: 200,
Body: "Health check passed",
}, nil
}
return &events.APIGatewayV2HTTPResponse{
StatusCode: 404,
Body: "Not Found",
}, nil
}
func main() {
lambda.Start(handler)
}
部署您的 lambda
结论
切换到 apigatewayv2httprequest 可解决使用 api gateway http api (v2) 时 lambda 函数中的空路径问题。请务必测试您的端点以确保路径路由按预期工作。
源自 github 问题:
https://github.com/aws/aws-lambda-go/issues/60
以上就是使用 API Gateway HTTP API 解决 Go Lambda 函数中的空路径问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号