如何在没有用户停机的情况下将我的 CloudFront 分配替换为另一个分配

How can I replace my CloudFront distribution with another without user downtime

初始设置

每个月

但失效过程缓慢且代价高昂,因此我的计划是创建一个新的 Cloudfront 发行版。然后修改我的 Route53 域以指向新的 CloudFront,完成后删除原来的 CloudFront 分配。

问题在于,如果您设置的 Alternate CName 已被另一个分配使用,CloudFront 将不允许您创建新的分配。所以我不能创建我的新发行版,直到我禁用并删除现有的发行版,然后我必须部署我的新发行版,这需要很长时间,而且网站会在那段时间关闭。

我的替代方案如下

有一个笑话的变体 "Some people, when confronted with a problem, think, 'I know, I'll use caching.' Now they have two problems."

一般来说,使用 CDN 时需要失效(尤其是 "immediate")失效是一种反模式。有几种解决方法:

  • (最好)在提供指向您的分发内容的链接时,对链接进行版本控制。你说它每月更改一次 - 所以也许 /image-2015-04.jpg 是上个月的图像,现在是 /image-2015-05.jpg.
  • 使用 Cache-Control headers 以便每次或可能每小时重新验证一次内容

为此使用 Route53 是粗略的 - 不仅有 DNS 的 TTL(缓存周期),而且并非所有服务器都支持短 TTL。

您实际上不必等待分发被删除以重新使用 cname。我也在做类似的事情。

  • 创建一个与我当前的设置相同的新分配,减去 cname 设置
  • 从旧分发中删除 cname,保存
  • 立即将 cname 添加到新分发
  • 更新 DNS 以指向新的分配
  • 保留旧的分布,直到两者都被部署
  • 禁用再删除,进行清理

因为我使用了云端分发的别名,所以我不用担心解析器会缓存我的旧云端提供的 DNS 名称。它对我来说效果很好。