使用 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 資料表。