多租户SaaS架构下如何将请求路由至对应租户的API Gateway?
多租户竖井架构API路由解决方案
可行解决方案
方案1:CloudFront + Lambda@Edge 动态源路由(最高优先级推荐)
- 仅需配置1个CloudFront分发,绑定泛域名
*.api.foo.com,Route53直接配置1条泛解析记录指向该CloudFront分发即可,无需为单个租户单独配置解析记录。 - 编写Lambda@Edge函数,在Origin Request触发阶段执行:解析请求Host头提取租户标识(比如从
tenant1.api.foo.com中提取tenant1),查询提前存储的租户ID与对应API Gateway默认执行端点的映射关系(租户注册时就写入映射库,建议存在DynamoDB中),动态修改请求的源站地址为对应租户的API Gateway端点,直接转发请求。 - 该方案完全规避了你提到的两个配额限制:不需要在CloudFront提前配置所有源站(突破25个源站上限),也不需要为每个租户API Gateway配置自定义域名(仅占用1个CloudFront自定义域名配额,租户API Gateway直接用官方默认的执行端点即可)。
方案2:统一入口API Gateway路由
- 申请1个API Gateway自定义域名,绑定泛域名
*.api.foo.com,Route53配置泛解析指向该API Gateway的自定义域名,仅占用1个API Gateway自定义域名配额。 - 该统一入口API Gateway配置通配符路由规则,所有请求到达后先解析Host头提取租户ID,查询映射表找到对应租户的API Gateway地址,通过HTTP集成转发请求到对应租户的资源栈API。
- 该方案适合请求量不大的场景,实现成本比Lambda@Edge更低,也可以在统一入口层统一做鉴权、限流等公共治理逻辑。
落地注意事项
- 租户映射数据建议存储在DynamoDB中,配合DynamoDB Global Tables或者CloudFront缓存降低路由查询延迟。
- 如果租户API Gateway是私有部署,可以通过VPC Endpoint打通统一入口与租户栈的网络,避免公网暴露租户API端点。
- 路由逻辑中必须增加租户合法性校验,不存在的租户直接返回404,避免无效请求消耗后端资源。
内容的提问来源于stack exchange,提问作者Fernando Santiago
相关产品推荐
相关产品推荐

