使用 OpenAPI 定义设置具有 Lambda 代理集成的代理资源 - Amazon API Gateway

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