我有以下配置:
Cloudfront - ELB - AutoScalingGroup - EC2s
file-[hash].js
来自自定义源 (ELB) 的文件(名称中包含 chunkhash)。file-[hash].js
文件以及index.html
指向.js
Cloudfront 中适当文件的动态生成的文件。一切正常,直到触发具有更改的资产的 Cloudformation 部署(假设从file-1.js
到file-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 …