蓝/绿部署 – AWS Cloudfront,ELB作为自定义来源

我有以下configuration:

Cloudfront - ELB - AutoScalingGroup - EC2s

  • Cloudfront从自定义来源(ELB)提供file-[hash].js文件(在其名称中包含chunkhash)。
  • EC2提供Cloudfront的file-[hash].js文件,以及在Cloudfront中指向相应的.js文件的dynamic生成的index.html文件。
  • ELB已启用连接排空function。

一切工作正常,直到一个变化的资产的CloudForms部署被触发(让我们从file-1.jsfile-2.js ) – 当新版本被打开时,浏览器得到新的时间窗口指向file-2.js index.html文件,但是当它尝试下载file-2.js它会从Cloudfront获取404,从而向用户显示错误。

我知道这是因为蓝/绿部署是如何工作的 – 即有两个版本的应用程序同时工作,ELB可以将一个请求redirect到新版本(从浏览器请求index.html ),第二个到旧版本(从Cloudfront请求file-2.js )。

Cloudfront文档说,您应该“在所有服务器上托pipe和提供相同的内容”,但是在部署期间如何实现? 是否有可能强制在任何时候只有单一版本的应用程序可以通过ELB访问,这样Cloudfront永远不会获得404新资产?

如果没有,除了从自定义原点切换到S3之外,还有其他解决方法吗? (由于部署/维护的复杂性,希望避免它)

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

  ASG:
    types:AWS :: AutoScaling :: AutoScalingGroup
     creationPolicy的:
       ResourceSignal:
        计数:
          参考:2
        超时:PT10M
     UpdatePolicy:
       AutoScalingReplacingUpdate:
         WillReplace:真的