无需CloudFront,如何用Route53对接AppSync端点并配置自定义域名?
为什么AWS AppSync自定义域名常需要CloudFront?(附无需手动配置CloudFront的方案)
先给你理清楚核心逻辑,再说说现在的简化方案:
为啥Route53直接转发行不通?
Route53本质只是个DNS解析服务——它只能把你的自定义域名指向某个IP或AWS资源,但解决不了两个关键问题:
- SSL证书不匹配:AppSync默认的随机端点用的是AWS自己的SSL证书,只对
xxx.appsync-api.xxx.amazonaws.com这类域名有效。如果直接把自定义域名解析到这个端点的IP,用户访问时浏览器会因为证书域名不匹配弹出安全错误,根本没法正常用。 - Host头校验:AppSync的后端会校验请求的Host头,必须是它自己的官方域名,就算你绕开SSL错误,请求也会被拒绝。
早期大家用CloudFront,不是因为需要缓存,而是CloudFront能当SSL终止器+反向代理:它可以配置你自己的自定义域名SSL证书(通过ACM),在边缘节点处理SSL连接,然后把请求转发给AppSync时自动修改Host头为官方域名,完美解决上面两个问题。
现在不用手动配CloudFront也能搞定!
AWS后来给AppSync加了原生自定义域名支持,不需要你手动搭建CloudFront,步骤超简单:
- 先在us-east-1区域申请ACM证书(不管你的AppSync在哪个区域,这个区域是硬性要求),证书要覆盖你的自定义域名(比如
graphql.yourdomain.com)。 - 打开AppSync控制台,找到你的API,进入「设置」→「自定义域名」,点击「添加自定义域名」。
- 填入你的自定义域名,选刚才申请的ACM证书,点创建就行。AWS会自动帮你配置一个托管的CloudFront分配(这个不用你管)。
- 等配置完成后,去Route53给你的自定义域名加一条别名记录,指向AppSync给你的目标域名(类似
dxxxx.cloudfront.net那种),就大功告成了。
能不能完全绕开CloudFront?
说实话,目前不行。因为AppSync本身不支持直接绑定自定义域名并提供对应SSL证书,必须要有一个中间层来处理SSL终止和Host头转换——要么你自己手动配CloudFront,要么用AWS为AppSync自定义域名自动创建的托管CloudFront。Route53 alone解决不了这些问题,所以没法直接把请求转发到AppSync端点。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

