Hello! 欢迎来到小浪资源网!



使用 API Gateway HTTP API 解决 Go Lambda 函数中的空路径问题


将基于 golang/dockerhttp 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

  1. 将 lambda 函数部署到 aws。
  2. 在 api gateway 中创建 http api 并将其与您的 lambda 函数集成。
  3. 测试端点:向 /health 发送请求应该返回成功消息,而任何其他路径都会返回 404。

结论

切换到 apigatewayv2httprequest 可解决使用 api gateway http api (v2) 时 lambda 函数中的空路径问题。请务必测试您的端点以确保路径路由按预期工作。

源自 github 问题:

https://github.com/aws/aws-lambda-go/issues/60

相关阅读