將基於 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中文網其他相關文章!