Route53根域已有A记录时如何同时映射S3静态站与Lambda API?
问题解答
同域名多条A记录的支持情况
Route53本身支持为同一主机名创建多条同类型A记录,可配合加权路由、多值应答、故障转移、地理位置路由等策略实现DNS层面的流量拆分。但DNS解析工作在HTTP协议层之下,完全无法感知请求携带的URL路径信息,就算同时创建指向S3和API Gateway的两条A记录,解析阶段只会按照配置的路由策略返回其中一个端点的地址,用户访问/products/*路径时大概率被解析到S3端点返回404,完全无法实现按路径分流的需求,该思路不可行。
可行落地方案
该场景的核心是需要在DNS层和后端服务之间增加一层支持HTTP协议解析的七层路由组件,根据请求路径转发到对应后端,两个生产级常用方案如下:
- 方案一:CloudFront边缘路由(优先推荐,全Serverless无闲置成本)
- 删除Route53中原有直接指向S3存储桶的根域A记录
- 新建CloudFront分发,将
xyz.com添加为分发备用域名,绑定对应域名的SSL证书 - 在分发配置中添加两个源站:
- 源站A:原有托管静态首页的S3静态网站托管端点
- 源站B:已部署完成的API Gateway调用端点(也可直接使用Lambda函数URL作为源站)
- 配置缓存行为实现路径路由:
- 新建高优先级缓存行为,路径匹配规则设为
/products/*,关联到API Gateway/Lambda源站,根据业务需求配置响应缓存策略、支持的HTTP方法 - 将默认缓存行为(匹配所有路径
/*)关联到S3源站,负责响应根路径及其他静态资源请求
- 回到Route53控制台,为根域
xyz.com新建别名A记录,指向刚创建的CloudFront分发即可生效
- 方案二:ALB七层路由(适合已有VPC架构、长期使用ALB的场景)
- 删除Route53中原有直接指向S3存储桶的根域A记录
- 新建公网Application Load Balancer,配置HTTPS监听器并绑定对应域名的SSL证书
- 为ALB配置两个目标组:
- 目标组A:目标类型选择S3,绑定托管静态首页的存储桶
- 目标组B:目标类型选择Lambda,绑定处理产品页请求的Lambda函数,无需额外搭配API Gateway
- 配置HTTPS监听器规则:新增规则匹配路径
/products/*,转发到Lambda目标组;设置监听器默认动作转发到S3目标组 - 在Route53中为根域
xyz.com新建别名A记录,指向创建好的ALB即可
注:如果此前已经为API Gateway配置了
xyz.com作为自定义域名,使用CloudFront方案时可删除该自定义域名配置,直接让CloudFront回源到API Gateway的默认调用端点,简化配置流程。
内容的提问来源于stack exchange,提问作者monte
相关产品推荐
相关产品推荐

