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

时间:2015-05-07 13:27:55

标签: amazon-web-services amazon-cloudfront

初始设置

  • 在AWS上,我有一个提供页面的Elastic Beanstalk(EB)服务器。
  • 在特定请求的任何月份,它将始终提供相同的数据,因此我设置了Cloudfront分发版,以便更好地为客户提供服务并降低服务器命中率。
  • 在Route53中,域已配置为指向Cloudfront分发
  • 所有客户访问都是通过此域

每个月

  • 我部署了新版本的EB服务器
  • 然后,我想要使我的CloudFront中的所有页面无效,以便从EB服务器获取最新数据。

但是失效是缓慢而昂贵的,所以我的计划只是创建一个新的Cloudfront发行版。然后修改我的Route53域以指向新的CloudFront,然后完成后删除原始的CloudFront分配。

如果您设置了另一个分发已使用的备用CName ,则CloudFront不允许您创建新分发。所以我无法创建我的新发行版,直到我禁用然后删除现有发行版,然后我必须部署我的新发行版,这需要很长时间,并且该网站会在那段时间内停止。

我的替代方案如下

  • 部署新的EB服务器
  • 将Route53指向新EB服务器的负载均衡器
  • 停用CloudFront分配,然后等待。
  • 删除CloudFront分配,然后等待。
  • 创建新的CloudFront分配,然后等待。
  • 将Route 53域指向新的CloudFront分配

2 个答案:

答案 0 :(得分:3)

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

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

由于我是云端分发的别名,我不担心解析器缓存旧的云端提供的DNS名称。它对我来说效果很好。

答案 1 :(得分:2)

有一个笑话的变体说“有些人在面对问题时会想,'我知道,我会使用缓存。'现在他们有两个问题。“

一般来说,在使用CDN时,需要无效(尤其是“立即”)失效是反模式。有几种方法可以解决这个问题:

  • (最好)在为您的发布中的内容提供链接时,请对链接进行版本控制。你说它每月都在变化 - 所以也许/image-2015-04.jpg是上个月的形象,现在是/image-2015-05.jpg。
  • 使用Cache-Control标头,以便每次或每小时重新验证一次内容

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