如何在AWS SAM模板中移除API的Use Lambda Proxy integration勾选标记
如何在AWS SAM模板中移除API Gateway的「Use Lambda Proxy integration」勾选
我之前也碰到过这个问题——SAM默认会给API和Lambda的集成开启Proxy模式,也就是你在控制台看到的那个勾选框。要取消它,关键是要在模板里显式修改集成类型,而不是用默认配置。
下面是具体的做法:
首先明确:SAM中AWS::Serverless::Function的Api事件默认使用LambdaProxy集成,这就是那个勾选框自动选中的原因。要关闭它,你需要把集成类型改成Lambda,同时配置请求和响应的映射模板(这是普通Lambda集成的必需项)。
给你一个完整的模板示例参考:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.lambda_handler Runtime: python3.11 Events: HelloApi: Type: Api Properties: Path: /greet Method: get # 核心设置:显式指定集成类型为Lambda,替代默认的LambdaProxy Integration: Lambda # 配置请求模板:将API的查询参数映射为Lambda的输入事件 RequestTemplates: application/json: | { "username": "$input.params('username')" } # 配置响应模板:将Lambda的返回结果转换为API的响应格式 ResponseTemplates: application/json: | #set($inputRoot = $input.path('$')) { "greeting": "Hi there, $inputRoot.username!" } # 定义响应的状态码和头部信息 MethodResponses: - StatusCode: 200 ResponseParameters: method.response.header.Content-Type: "'application/json'"
关键细节说明:
Integration: Lambda:这一行是核心,它告诉SAM不要使用Proxy集成,转而使用传统Lambda集成,对应的控制台勾选框就会被取消。- RequestTemplates:用来定义API Gateway如何将客户端请求转换为Lambda函数的输入事件。你可以根据需求提取查询参数、路径参数、请求体等内容,比如上面的例子就提取了
username查询参数。 - MethodResponses & ResponseTemplates:用来定义Lambda的返回结果如何转换为API的响应。这里需要指定状态码、响应头,以及响应体的格式化规则,确保客户端能收到符合预期的输出。
如果不需要复杂的映射,也可以用简单模板(比如请求模板传递空对象),但必须配置至少一个对应你支持的Content-Type的请求模板,否则API Gateway会报错。
部署模板后,你可以去API Gateway控制台验证——对应的方法集成里,「Use Lambda Proxy integration」的勾选应该已经消失了。
内容的提问来源于stack exchange,提问作者hari
相关产品推荐
相关产品推荐

