使用 Lambda 代理整合與 OpenAPI 定義設定代理資源 - Amazon API Gateway

使用 Lambda 代理整合與 OpenAPI 定義設定代理資源

若要以 Lambda 代理整合類型設定代理資源,請以 Greedy 路徑參數建立 API 資源 (例如 /parent/{proxy+}),並將此資源與 arn:aws:lambda:us-west-2:123456789012:function:SimpleLambda4ProxyResource 方法上的 Lambda 函數後端 (例如 ANY) 整合。Greedy 路徑參數必須位於 API 資源路徑結尾。如同非代理資源,您可以使用 API Gateway 主控台、匯入 OpenAPI 定義檔,或直接呼叫 API Gateway REST API,來設定代理資源。

下列 OpenAPI API 定義檔顯示 API 範例,其中具有與名為 SimpleLambda4ProxyResource 的 Lambda 函數整合的代理資源。

OpenAPI 3.0
{ "openapi": "3.0.0", "info": { "version": "2016-09-12T17:50:37Z", "title": "ProxyIntegrationWithLambda" }, "paths": { "/{proxy+}": { "x-amazon-apigateway-any-method": { "parameters": [ { "name": "proxy", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": {}, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200" } }, "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:SimpleLambda4ProxyResource/invocations", "passthroughBehavior": "when_no_match", "httpMethod": "POST", "cacheNamespace": "roq9wj", "cacheKeyParameters": [ "method.request.path.proxy" ], "type": "aws_proxy" } } } }, "servers": [ { "url": "https://gy415nuibc.execute-api.us-east-1.amazonaws.com/{basePath}", "variables": { "basePath": { "default": "/testStage" } } } ] }
OpenAPI 2.0
{ "swagger": "2.0", "info": { "version": "2016-09-12T17:50:37Z", "title": "ProxyIntegrationWithLambda" }, "host": "gy415nuibc.execute-api.us-east-1.amazonaws.com", "basePath": "/testStage", "schemes": [ "https" ], "paths": { "/{proxy+}": { "x-amazon-apigateway-any-method": { "produces": [ "application/json" ], "parameters": [ { "name": "proxy", "in": "path", "required": true, "type": "string" } ], "responses": {}, "x-amazon-apigateway-integration": { "responses": { "default": { "statusCode": "200" } }, "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:SimpleLambda4ProxyResource/invocations", "passthroughBehavior": "when_no_match", "httpMethod": "POST", "cacheNamespace": "roq9wj", "cacheKeyParameters": [ "method.request.path.proxy" ], "type": "aws_proxy" } } } } }

在 Lambda 代理整合中,API Gateway 會在執行時間將傳入的請求映射到 Lambda 函數的輸入 event 參數。輸入包含請求方法、路徑、標頭、任何查詢字串參數、任何承載、相關聯內容和任何已定義的階段變數。「代理整合之 Lambda 函數的輸入格式」說明輸入格式。若要讓 API Gateway 成功將 Lambda 輸出映射至 HTTP 回應,Lambda 函數必須以 代理整合之 Lambda 函數的輸出格式 中所述的格式輸出結果。

在透過 ANY 方法之代理資源的 Lambda 代理整合中,單一後端 Lambda 函數透過代理資源作為所有請求的事件處理常式。例如,若要記錄流量模式,您可以在代理資源的 URL 路徑中使用 /state/city/street/house 提交請求,讓行動裝置傳送其州/省、城市、街道和建築物的位置資訊。後端 Lambda 函數接著可以剖析 URL 路徑,並將位置元組插入至 DynamoDB 資料表。