Golang/Docker 기반 HTTP API를 AWS Lambda에 배포할 때 APIGatewayProxyRequest의 경로 속성이 비어 있는 문제가 발생할 수 있습니다. 이는 Lambda 함수가 REST API(v1)와 다른 이벤트 구조를 사용하는 API Gateway HTTP API(v2)에서 이벤트를 수신하기 때문에 발생합니다.
문제
APIGatewayProxyRequest는 이전 REST API용으로 설계되었으며 HTTP API와 함께 사용하면 빈 경로 필드가 생성됩니다. 해결책은 올바른 이벤트 구조(APIGatewayV2HTTPRequest.
)를 사용하는 것입니다.솔루션
라우팅을 올바르게 처리하려면 RawPath 필드가 포함된 APIGatewayV2HTTPRequest 구조체를 사용하도록 전환하세요.
문서의 원본 코드(작동하지 않음):
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!