如何为两个不同AWS账户中的API Gateway配置同一自定义子域名?
解决方案:多AWS账户API Gateway统一子域名(api.example.com)
针对你在多账户无服务器架构中,希望将所有API Gateway统一到单个子域名下的需求,以下是两种比中间映射账户更轻量化、低运维开销的实现方案:
方案1:CloudFront + Lambda@Edge 路由转发
这是完全解耦各服务账户的方案,不需要中间聚合API账户:
- 配置CloudFront分发:将
api.example.com作为自定义域名,关联AWS ACM(必须部署在us-east-1区域)签发的SSL证书。 - 编写Lambda@Edge路由函数:在us-east-1区域创建Lambda函数,绑定到CloudFront的
Viewer Request触发阶段。函数逻辑根据请求路径(如/service1/*)匹配对应服务账户的API Gateway endpoint,修改请求的origin和host头,将请求转发到目标API。 - 服务账户API权限配置:每个服务的API Gateway添加资源策略,允许CloudFront分发的ARN调用;同时确保API Gateway的IAM权限允许跨账户访问。
- CDK自动化:每个服务的CDK栈可以输出自身API的endpoint到AWS SSM参数存储,主CloudFront栈读取这些参数自动生成Lambda@Edge的路由规则,无需手动跟踪服务添加状态。
优缺点:
- ✅ 各服务账户完全独立,无集中单点依赖
- ✅ 路由规则集中管理,支持复杂路径匹配
- ❌ Lambda@Edge调试需注意区域限制,日志分散在CloudFront边缘节点
方案2:主账户API Gateway跨账户聚合
基于API Gateway原生功能实现聚合,优化你之前的映射方案:
- 主账户创建聚合API:在绑定
api.example.com的主账户中创建REST API作为入口层。 - 跨账户权限配置:每个服务账户的API Gateway添加资源策略,允许主账户的聚合API调用;主账户创建IAM角色,赋予调用服务账户API的权限。
- 自动集成服务API:每个服务的CDK栈部署时,将自身API的endpoint写入SSM参数;主账户的CDK栈读取这些参数,自动在聚合API中创建对应路径的HTTP集成(如
/service2指向服务2的API endpoint)。 - 自定义域名绑定:主账户的聚合API绑定
api.example.com,所有请求通过路径转发到对应服务的API。
优缺点:
- ✅ 基于API Gateway原生能力,调试、监控更方便
- ✅ 路由逻辑可视化,可在API Gateway控制台直接管理
- ❌ 主账户聚合API是集中管理点,但通过CDK自动化可大幅降低运维开销
总结
如果追求完全解耦、无集中依赖,优先选方案1;如果更倾向于使用AWS原生API管理工具,方案2是更轻量化的优化选择。两者都能通过CDK实现自动化运维,避免手动跟踪服务API的添加状态。
内容的提问来源于stack exchange,提问作者Mohamad Bachar Hassan
相关产品推荐
相关产品推荐

