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 中国語 Web サイトの他の関連記事を参照してください。