API GatewayからLambdaを呼び出す場合、プロキシ統合(API Gatewayでメソッドの[統合リクエスト]に[Lambda プロキシ統合の使用]を設定した場合)、以下のURLにある形式でLambdaへパラメタが渡される。リクエストのパラメタは
queryStringParameters
に入ってくる。 https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format一方、非プロキシ統合(API Gatewayでメソッドの[統合リクエスト]に[Lambda プロキシ統合の使用]を設定なかった場合)は、[マッピングテンプレート]で指定したテンプレートに従ってパラメータが渡される。デフォルトでプルダウンから[メソッドリクエストのパススルー]を選択した場合、以下のような形式でLambdaへパラメタが渡される。リクエストのパラメタは
params.querystring
に入ってくる。
{ "body-json": {}, "params": { "path": {}, "querystring": { "parameter1": "value1", "parameter2": "value2" }, "header": {} }, "stage-variables": {}, "context": { "account-id": "999999999999", "api-id": "xxxxxxxxxx", "api-key": "xxx-xxx-api-key", "authorizer-principal-id": "", "caller": "XXXXXXXXXXXXXXXXXXXXX", "cognito-authentication-provider": "", "cognito-authentication-type": "", "cognito-identity-id": "", "cognito-identity-pool-id": "", "http-method": "GET", "stage": "xxx-xxx-stage", "source-ip": "xxx-xxx-source-ip", "user": "XXXXXXXXXXXXXXXXXXXXX", "user-agent": "aws-internal/3 aws-sdk-java/1.12.201 Linux/5.4.181-109.354.amzn2int.x86_64 OpenJDK_64-Bit_Server_VM/25.322-b06 java/1.8.0_322 vendor/Oracle_Corporation cfg/retry-mode/standard", "user-arn": "arn:aws:iam::999999999999:user/your-user-id", "request-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resource-id": "xxxxxx", "resource-path": "/path-to-resource" } }
呼出元に返したいJSONの形式があらかじめ決められてるとか、JSONでなくてXMLでレスポンスを返したいとかの場合、けっきょくプロキシ統合は使えなくなる。なので、プロキシ統合の場合と同じパラメタの形式になるマッピングテンプレートがあればいいんだけど……