Heim >Backend-Entwicklung >Golang >Lösen des Problems mit leeren Pfaden in Go-Lambda-Funktionen mit der API Gateway-HTTP-API

Lösen des Problems mit leeren Pfaden in Go-Lambda-Funktionen mit der API Gateway-HTTP-API

Patricia Arquette
Patricia ArquetteOriginal
2024-12-26 08:49:09948Durchsuche

Solving the Empty Path Issue in Go Lambda Functions with API Gateway HTTP API

Beim Bereitstellen einer Golang/Docker-basierten HTTP-API für AWS Lambda kann ein Problem auftreten, bei dem die Pfadeigenschaft in APIGatewayProxyRequest leer ist. Dies liegt daran, dass die Lambda-Funktion Ereignisse von der API Gateway HTTP API (v2) empfängt, die im Vergleich zur REST API (v1) eine andere Ereignisstruktur verwendet.

Das Problem

APIGatewayProxyRequest ist für die ältere REST-API konzipiert und führt bei Verwendung mit der HTTP-API zu einem leeren Pfadfeld. Die Lösung besteht darin, die richtige Ereignisstruktur zu verwenden: APIGatewayV2HTTPRequest.

Die Lösung

Wechseln Sie zur Verwendung der APIGatewayV2HTTPRequest-Struktur, die das RawPath-Feld enthält, um das Routing korrekt zu verarbeiten.

Der Originalcode aus ihrer Dokumentation (der nicht funktioniert):

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)
}

Hier ist ein aktualisiertes Lambda-Funktionsbeispiel:

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)
}

Bereitstellen Ihres Lambda

  1. Stellen Sie die Lambda-Funktion in AWS bereit.
  2. Erstellen Sie eine HTTP-API in API Gateway und integrieren Sie sie in Ihre Lambda-Funktion.
  3. Testen Sie den Endpunkt: Das Senden einer Anfrage an /health sollte eine Erfolgsmeldung zurückgeben, während jeder andere Pfad eine 404 zurückgibt.

Fazit

Der Wechsel zu APIGatewayV2HTTPRequest behebt das Problem eines leeren Pfads in Ihrer Lambda-Funktion, wenn Sie die API Gateway HTTP API (v2) verwenden. Testen Sie unbedingt Ihren Endpunkt, um sicherzustellen, dass das Pfadrouting wie erwartet funktioniert.

Quelle: Github Issue:

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

Das obige ist der detaillierte Inhalt vonLösen des Problems mit leeren Pfaden in Go-Lambda-Funktionen mit der API Gateway-HTTP-API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn