との共同作業 AWS Lambda プロキシ統合 HTTP APIs - Amazon API Gateway

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

との共同作業 AWS Lambda プロキシ統合 HTTP APIs

Lambda プロキシ統合を使用すると、API ルートを Lambda 関数と統合できます。クライアントが API を呼び出すと、API Gateway はリクエストを Lambda 関数に送信し、関数のレスポンスをクライアントに返します。HTTP API の作成例については、「HTTP API の作成」を参照してください。

ペイロード形式バージョン

ペイロード形式バージョンは、API Gateway が Lambda 統合に送信するデータの形式と、API Gateway が Lambda からのレスポンスをどのように 解釈するかを指定します。ペイロード形式バージョンを指定しない場合、AWS マネジメントコンソール はデフォルトで最新バージョンを使用します。_を作成した場合 Lambda 統合を AWS CLI、 AWS CloudFormation、または SDK の場合は、 payloadFormatVersion。 サポートされている値は、次のとおりです。 1.0 および 2.0.

次の例は、各ペイロード形式バージョンの構造を示しています。

注記

Format 2.0 には multiValueHeaders または multiValueQueryStringParameters フィールドがありません。重複するヘッダーはコンマと結合され、headers フィールドに含まれます。重複するクエリ文字列はコンマと組み合わされ、queryStringParameters フィールドに含められます。

Format 2.0 には新しい cookies フィールドが含まれます。リクエスト内のすべてのクッキーヘッダーはコンマで結合され、cookies フィールドに追加されます。クライアントへのレスポンスでは、各クッキーは set-cookie ヘッダーになります。

2.0
{ "version": "2.0", "routeKey": "$default", "rawPath": "/my/path", "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value", "cookies": [ "cookie1", "cookie2" ], "headers": { "Header1": "value1", "Header2": "value1,value2" }, "queryStringParameters": { "parameter1": "value1,value2", "parameter2": "value" }, "requestContext": { "accountId": "123456789012", "apiId": "api-id", "authentication": { "clientCert": { "clientCertPem": "CERT_CONTENT", "subjectDN": "www.example.com", "issuerDN": "Example issuer, "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", "validity": { "notBefore": "May 28 12:30:02 2019 GMT", "notAfter": "Aug 5 09:36:04 2021 GMT" } } }, "authorizer": { "jwt": { "claims": { "claim1": "value1", "claim2": "value2" }, "scopes": [ "scope1", "scope2" ] } }, "domainName": "id.execute-api.us-east-1.amazonaws.com", "domainPrefix": "id", "http": { "method": "POST", "path": "/my/path", "protocol": "HTTP/1.1", "sourceIp": "IP", "userAgent": "agent" }, "requestId": "id", "routeKey": "$default", "stage": "$default", "time": "12/Mar/2020:19:03:58 +0000", "timeEpoch": 1583348638390 }, "body": "Hello from Lambda", "pathParameters": { "parameter1": "value1" }, "isBase64Encoded": false, "stageVariables": { "stageVariable1": "value1", "stageVariable2": "value2" } }
1.0
{ "version": "1.0", "resource": "/my/path", "path": "/my/path", "httpMethod": "GET", "headers": { "Header1": "value1", "Header2": "value2" }, "multiValueHeaders": { "Header1": [ "value1" ], "Header2": [ "value1", "value2" ] }, "queryStringParameters": { "parameter1": "value1", "parameter2": "value" }, "multiValueQueryStringParameters": { "parameter1": [ "value1", "value2" ], "parameter2": [ "value" ] }, "requestContext": { "accountId": "123456789012", "apiId": "id", "authorizer": { "claims": null, "scopes": null }, "domainName": "id.execute-api.us-east-1.amazonaws.com", "domainPrefix": "id", "extendedRequestId": "request-id", "httpMethod": "GET", "identity": { "accessKey": null, "accountId": null, "caller": null, "cognitoAuthenticationProvider": null, "cognitoAuthenticationType": null, "cognitoIdentityId": null, "cognitoIdentityPoolId": null, "principalOrgId": null, "sourceIp": "IP", "user": null, "userAgent": "user-agent", "userArn": null, "clientCert": { "clientCertPem": "CERT_CONTENT", "subjectDN": "www.example.com", "issuerDN": "Example issuer, "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", "validity": { "notBefore": "May 28 12:30:02 2019 GMT", "notAfter": "Aug 5 09:36:04 2021 GMT" } } }, "path": "/my/path", "protocol": "HTTP/1.1", "requestId": "id=", "requestTime": "04/Mar/2020:19:15:17 +0000", "requestTimeEpoch": 1583349317135, "resourceId": null, "resourcePath": "/my/path", "stage": "$default" }, "pathParameters": null, "stageVariables": null, "body": "Hello from Lambda!", "isBase64Encoded": true }

Lambda 関数レスポンス形式

ペイロード形式バージョンによって、 Lambda 関数が返す必要があるレスポンスの構造が決まります。

Lambda 関数レスポンス形式 1.0

1.0 形式バージョンでは、Lambda 統合は次の形式でレスポンスを返す必要があります。

{ "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... }, "body": "..." }

Lambda 関数レスポンス形式 2.0

2.0 形式バージョンでは、API Gateway はレスポンス形式を推測できます。API Gateway は、Lambda 関数が有効な JSON を返し、statusCode を返さない場合に次の仮定を行います。

  • isBase64Encoded はです false.

  • statusCode はです 200.

  • content-type はです application/json.

  • body は関数のレスポンスです。

次の例は、Lambda 関数とのAPI Gateway 解釈 の統合を示しています。

Lambda 関数の出力 API Gateway 解釈
"Hello from Lambda!"
{ "isBase64Encoded": false, "statusCode": 200, "body": "Hello from Lambda!", "headers": { "Content-Type": "application/json" } }
{ "message": "Hello from Lambda!" }
{ "isBase64Encoded": false, "statusCode": 200, "body": "{ \"message\": \"Hello from Lambda!\" }", "headers": { "Content-Type": "application/json" } }

レスポンスをカスタマイズするには、Lambda 関数は以下の形式でレスポンスを返す必要があります。

{ "cookies" : ["cookie1", "cookie2"], "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "body": "Hello from Lambda!" }