Apabila menggunakan API HTTP berasaskan Golang/Docker ke AWS Lambda, anda mungkin menghadapi isu di mana sifat laluan dalam APIGatewayProxyRequest kosong. Ini berlaku kerana fungsi Lambda menerima peristiwa daripada API Gateway API HTTP (v2), yang menggunakan struktur peristiwa berbeza berbanding API REST (v1).
Masalahnya
APIGatewayProxyRequest direka untuk API REST yang lebih lama dan akan menghasilkan medan laluan kosong apabila digunakan dengan API HTTP. Penyelesaiannya adalah dengan menggunakan struktur acara yang betul: APIGatewayV2HTTPRequest.
Penyelesaian
Tukar kepada menggunakan struct APIGatewayV2HTTPRequest, yang termasuk medan RawPath untuk mengendalikan penghalaan dengan betul.
Kod asal daripada dokumentasi mereka (yang tidak berfungsi):
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) }
Berikut ialah contoh fungsi Lambda yang dikemas kini:
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) }
Menggunakan Lambda Anda
Kesimpulan
Bertukar kepada APIGatewayV2HTTPRequest menyelesaikan isu laluan kosong dalam fungsi Lambda anda apabila menggunakan API HTTP Gateway API (v2). Pastikan anda menguji titik akhir anda untuk memastikan penghalaan laluan berfungsi seperti yang diharapkan.
Sumber daripada isu github:
https://github.com/aws/aws-lambda-go/issues/60
Atas ialah kandungan terperinci Menyelesaikan Isu Laluan Kosong dalam Fungsi Go Lambda dengan API HTTP Gateway API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!