lambdaプロキシ統合って?
API Gatewayが受け取ったパラメータやリクエストヘッダなどの情報をlambdaのevent引数にわたすようにする方法
Lambda プロキシ統合では、クライアントが API リクエストを送信すると、API Gateway は、統合された Lambda 関数に raw リクエストをそのまま渡します。ただし、リクエストパラメータの順序は保持されません。このリクエストデータには、リクエストヘッダー、クエリ文字列パラメータ、URL パス変数、ペイロード、および API 設定データが含まれます。設定データには、現在のデプロイステージ名、ステージ変数、ユーザー ID、または承認コンテキスト (存在する場合) を含めることができます。
API Gateway の Lambda プロキシ統合をセットアップする - Amazon API Gateway
どうやって設定するの?
API Gateway作成時に「lambdaプロキシ統合」をonにする
lambdaプロキシ統合した時のevent引数の中身
API Gatewayで、 /create?branch_name=aaa&commit_hash=bbb
というPATHを叩いた場合のevent引数の中身
{ "resource": "/create", "path": "/create", "httpMethod": "GET", "headers": null, "multiValueHeaders": null, "queryStringParameters": { "branch_name": "aaa", "commit_hash": "bbb" }, "multiValueQueryStringParameters": { "branch_name": [ "aaa" ], "commit_hash": [ "bbb" ] }, "pathParameters": null, "stageVariables": null, "requestContext": { "resourceId": "*****", "resourcePath": "/create", "httpMethod": "GET", "extendedRequestId": "*****", "requestTime": "29/Jan/2020:08:28:51 +0000", "path": "/create", "accountId": "*****", "protocol": "HTTP/1.1", "stage": "test-invoke-stage", "domainPrefix": "testPrefix", "requestTimeEpoch": 1580286531393, "requestId": "*****", "identity": { "cognitoIdentityPoolId": null, "cognitoIdentityId": null, "apiKey": "test-invoke-api-key", "principalOrgId": null, "cognitoAuthenticationType": null, "userArn": "arn:aws:iam::*****:*****", "apiKeyId": "*****", "userAgent": "aws-internal/3 aws-sdk-java/1.11.690 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.232-b09 java/1.8.0_232 vendor/Oracle_Corporation", "accountId": "*****", "caller": "*****", "sourceIp": "*****", "accessKey": "*****", "cognitoAuthenticationProvider": null, "user": "*****" }, "domainName": "testPrefix.testDomainName", "apiId": "*****" }, "body": null, "isBase64Encoded": false }
クエリパラメータを取りたい場合
event['queryStringParameters']
か event['multiValueQueryStringParameters']
から取る
POSTされたデータを取りたい場合
event['body']
から取る。テキストデータで来るので、parseする必要があるので注意