如何在没有用户停机的情况下将我的 CloudFront 分配替换为另一个分配
How can I replace my CloudFront distribution with another without user downtime
初始设置
- 在 AWS 上,我有一个提供页面服务的 Elastic Beanstalk (EB) 服务器。
- 在任何一个月内,对于特定请求,它将始终提供相同的数据,因此我设置了一个 Cloudfront 分布以更好地为客户服务并减少服务器访问。
- 在 Route53 中将域配置为指向 Cloudfront 分布
- 所有客户访问都通过此域
每个月
- 我部署了新版本的 EB 服务器
- 然后我想使我的 CloudFront 中的所有页面无效,以便它可以从 EB 服务器获取最新数据。
但失效过程缓慢且代价高昂,因此我的计划是创建一个新的 Cloudfront 发行版。然后修改我的 Route53 域以指向新的 CloudFront,完成后删除原来的 CloudFront 分配。
问题在于,如果您设置的 Alternate CName 已被另一个分配使用,CloudFront 将不允许您创建新的分配。所以我不能创建我的新发行版,直到我禁用并删除现有的发行版,然后我必须部署我的新发行版,这需要很长时间,而且网站会在那段时间关闭。
我的替代方案如下
- 部署新的 EB 服务器
- 将 Route53 指向新 EB 服务器的负载均衡器
- 禁用 CloudFront 分发,然后等待。
- 删除 CloudFront 分发,然后等待。
- 创建新的 CloudFront 分配,然后等待。
- 将 Route 53 域指向新的 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 名称。它对我来说效果很好。
初始设置
- 在 AWS 上,我有一个提供页面服务的 Elastic Beanstalk (EB) 服务器。
- 在任何一个月内,对于特定请求,它将始终提供相同的数据,因此我设置了一个 Cloudfront 分布以更好地为客户服务并减少服务器访问。
- 在 Route53 中将域配置为指向 Cloudfront 分布
- 所有客户访问都通过此域
每个月
- 我部署了新版本的 EB 服务器
- 然后我想使我的 CloudFront 中的所有页面无效,以便它可以从 EB 服务器获取最新数据。
但失效过程缓慢且代价高昂,因此我的计划是创建一个新的 Cloudfront 发行版。然后修改我的 Route53 域以指向新的 CloudFront,完成后删除原来的 CloudFront 分配。
问题在于,如果您设置的 Alternate CName 已被另一个分配使用,CloudFront 将不允许您创建新的分配。所以我不能创建我的新发行版,直到我禁用并删除现有的发行版,然后我必须部署我的新发行版,这需要很长时间,而且网站会在那段时间关闭。
我的替代方案如下
- 部署新的 EB 服务器
- 将 Route53 指向新 EB 服务器的负载均衡器
- 禁用 CloudFront 分发,然后等待。
- 删除 CloudFront 分发,然后等待。
- 创建新的 CloudFront 分配,然后等待。
- 将 Route 53 域指向新的 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 名称。它对我来说效果很好。