小编mgr*_*r32的帖子

蓝/绿部署 - 以 ELB 作为自定义源的 AWS Cloudfront

我有以下配置:

Cloudfront - ELB - AutoScalingGroup - EC2s

  • Cloudfront 提供file-[hash].js来自自定义源 (ELB) 的文件(名称中包含 chunkhash)。
  • EC2 为 Cloudfront 提供file-[hash].js文件以及index.html指向.jsCloudfront 中适当文件的动态生成的文件。
  • ELB 启用了连接耗尽。

一切正常,直到触发具有更改的资产的 Cloudformation 部署(假设从file-1.jsfile-2.js) - 当新版本打开时,浏览器获取index.html指向 的新文件时有一个很短的时间窗口file-2.js,但当它尝试下载时file-2.js它从 Cloudfront 获取 404,从而向用户显示错误。

我理解这是因为蓝/绿部署的工作原理 - 即有时应用程序的两个版本同时工作,ELB 可以将一个请求重定向到新版本(来自index.html浏览器的请求),将第二个请求重定向到旧版本(从 Cloudfront请求file-2.js)。

Cloudfront 文档说您应该“在所有服务器上托管并提供相同的内容。”,但我如何在部署过程中实现这一点?是否可以强制在任何给定时间通过 ELB 只能访问单一版本的应用程序,以便 Cloudfront 永远不会收到新资产的 404 错误?

如果没有,除了从自定义源切换到 S3 之外,还有其他选项可以解决此问题吗?(由于部署/维护复杂性,希望避免它)

请注意,从更新策略 AutoScalingRollingUpdate 切换到 AutoScalingReplacingUpdate 没有帮助:

助理秘书长:
    类型:AWS::AutoScaling::AutoScalingGroup
    创作政策:
      资源信号:
        数数:
          参考号:2
        超时:PT10M …

amazon-cloudfront amazon-web-services amazon-elb

5
推荐指数
1
解决办法
757
查看次数