Lors du déploiement d'une API HTTP basée sur Golang/Docker sur AWS Lambda, vous pouvez rencontrer un problème où la propriété path dans APIGatewayProxyRequest est vide. Cela se produit car la fonction Lambda reçoit des événements de l'API HTTP API Gateway (v2), qui utilise une structure d'événements différente de celle de l'API REST (v1).
Le problème
APIGatewayProxyRequest est conçu pour l'ancienne API REST et entraînera un champ de chemin vide lorsqu'il est utilisé avec l'API HTTP. La solution consiste à utiliser la structure d'événement correcte : APIGatewayV2HTTPRequest.
La solution
Utilisez la structure APIGatewayV2HTTPRequest, qui inclut le champ RawPath pour gérer correctement le routage.
Le code original issu de leur documentation (qui ne fonctionne pas) :
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) }
Voici un exemple de fonction Lambda mis à jour :
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) }
Déployer votre Lambda
Conclusion
Le passage à APIGatewayV2HTTPRequest résout le problème d'un chemin vide dans votre fonction Lambda lors de l'utilisation de l'API HTTP API Gateway (v2). Assurez-vous de tester votre point de terminaison pour vous assurer que le routage du chemin fonctionne comme prévu.
Provenant d'un problème github :
https://github.com/aws/aws-lambda-go/issues/60
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!