Serverless.yml中API Gateway配置及限流等AWS技术问题咨询
问题解答
1. 这种配置是否在使用API Gateway?若未使用,如何指定使用API Gateway?
- 这份
serverless.yml配置正在使用API Gateway,具体是轻量化的HTTP API版本。httpApi是Serverless Framework的声明式配置,会自动帮你创建HTTP API并完成与Lambda函数的路由关联,无需手动操作AWS控制台。 - 如果需要使用功能更全面的API Gateway REST API,只需将配置中的
httpApi替换为http即可,示例:
functions: simple: handler: handler.simple events: - http: 'PATCH /elo'
2. 当前使用的是Lambda-Proxy还是Lambda Integration?如何指定使用Lambda Integration?
- 先明确AWS的集成术语:API Gateway与Lambda的集成分为两类:
- Lambda Proxy集成:请求会完整传递给Lambda,Lambda必须返回符合API Gateway规范的响应(包含
statusCode、body、headers等字段),这是httpApi/http事件的默认配置。 - Lambda非Proxy集成(即自定义Lambda Integration):可通过映射模板自定义传递给Lambda的请求数据格式,以及处理Lambda的返回结果。
- Lambda Proxy集成:请求会完整传递给Lambda,Lambda必须返回符合API Gateway规范的响应(包含
- 要启用Lambda非Proxy集成,需在
httpApi配置中添加integrationType及映射规则,示例:
functions: extended: handler: handler.extended events: - httpApi: method: POST path: /post/just integrationType: AWS requestTemplates: application/json: '{ "customParam": "$request.body.param" }' responseTemplates: application/json: '$input.path(''$'')'
说明:integrationType: AWS指定非Proxy集成,requestTemplates定义请求映射逻辑,responseTemplates定义响应转换规则。
3. AWS API Gateway是否适合实现基于Bearer Token的限流,即每个用户120分钟内仅允许1000次请求?
- 完全适合,需结合Lambda Authorizer和API Gateway Usage Plan实现:
- 用Lambda Authorizer解析请求中的Bearer Token,提取用户唯一标识(如用户ID)。
- 在Authorizer的响应中,将用户ID注入到请求上下文(
context字段)。 - 配置API Gateway的Usage Plan,设置以用户ID为维度的限流规则(120分钟内1000次请求);或通过自定义限流策略,基于上下文的用户ID进行限流。
- 也可搭配WAF速率规则实现更灵活的限流,但API Gateway原生的Usage Plan已能满足这类用户级限流需求。
内容的提问来源于stack exchange,提问作者SoT
相关产品推荐
相关产品推荐

