あるチームが、API GatewayのREST APIでバックエンドのLambda関数への統合リクエストを設定している。クライアントはJSON形式で { "userId": "123", "action": "purchase" } というボディを送信するが、バックエンドのLambda関数は { "user_id": "123", "operation": "purchase" } という形式のJSONを期待している。Lambda関数のコードを変更せずに、API Gatewayのレイヤーでリクエストのキー名を変換する方法として最も適切なものはどれか。
- A. API GatewayのLambdaプロキシ統合(Lambda Proxy Integration)を使い、Lambda側でキー名を変換する
- B. API Gatewayステージ変数にキーマッピングの設定を記述してLambdaに渡す
- C. API Gatewayの統合リクエストにVTL(Velocity Template Language)マッピングテンプレートを設定してキー名を変換する
- D. CloudFront FunctionをAPI Gatewayの前段に配置してリクエストボディを書き換える
解答と解説を見る
正解: C
API Gatewayのマッピングテンプレートは、VTL(Apache Velocity Template Language)を使ってリクエスト・レスポンスのペイロードを変換する機能である。統合リクエストのマッピングテンプレートで `{"user_id": "$input.path('$.userId')", "operation": "$input.path('$.action')"}` のように記述することで、クライアントからのJSONをバックエンドが期待する形式に変換できる。Lambda関数のコードを一切変更せずに実現できる点がポイントである。選択肢Aのプロキシ統合ではAPI Gatewayはリクエストをそのままバックエンドに転送するため、マッピングテンプレートは使用できない。変換を行うにはLambda内でキー名を変換するコードが必要になり、要件の「Lambda関数のコードを変更しない」に反する。選択肢Bのステージ変数はデプロイ環境に応じたエンドポイントURLや設定値を切り替えるためのものであり、リクエストボディの変換には使用できない。選択肢DのCloudFront Functionはキャッシュビヘイビアやリクエストヘッダーの操作には使えるが、POSTリクエストのボディ書き換えはサポートしていない。
📚 関連サービスの解説: Amazon API Gateway