我有以下configuration:
Cloudfront - ELB - AutoScalingGroup - EC2s
file-[hash].js文件(在其名称中包含chunkhash)。 file-[hash].js文件,以及在Cloudfront中指向相应的.js文件的dynamic生成的index.html文件。 一切工作正常,直到一个变化的资产的CloudForms部署被触发(让我们从file-1.js到file-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:真的