使用 OpenAPI 定义设置具有 Lambda 代理集成的代理资源
要设置具有 Lambda 代理集成类型的代理资源,请创建一个具有“贪婪”路径参数(例如,/parent/{proxy+}
)的 API 资源,并将该资源与 arn:aws:lambda:us-west-2:123456789012:function:SimpleLambda4ProxyResource
方法上的 Lambda 函数后端(例如,ANY
)集成。“贪婪”路径参数必须位于 API 资源路径的末尾。与处理非代理资源一样,您可以通过使用 API Gateway 控制台、导入 OpenAPI 定义文件或直接调用 API Gateway REST API 来设置代理资源。
以下 OpenAPI API 定义文件显示了一个 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 表。