【发布时间】:2023-03-15 08:51:01
【问题描述】:
目前我正在使用 S3 和 CloudFront 来托管静态 Angular 应用程序。
我想在每次部署时对应用进行版本控制,以确保轻松回滚(通过我的命令行工具或自动管道)。
我的 S3 存储桶看起来像这样:
/production/v1.2
/production/v1.3
/production/v1.4
下一次部署将在文件夹 /production/v1.5 等中。
我想使用这种策略,以便在回滚的情况下,我只需将网站指向从旧版本 /production/v1.4 加载。
- 我的第一个解决方案是更新 CloudFront 配置源路径以指向新文件夹,例如
/production/v1.4 - 在回滚的情况下,我只需将 CloudFront 配置源路径更新为
/production/v1.3
第二个解决方案相反,我想有一个 live/ 文件夹并有一个 CloudFront 原始路径指向 S3 中的 live/index.html 文件夹,并将我的应用程序的最后一个版本复制到那里,或者每次都复制回滚版本而不更改CloudFront 源路径:
/production/v1.2
/production/v1.3
/production/v1.4
/production/live
- 在
/production/v1.4和/production/live中部署新版本 - 在回滚的情况下,只需将
/production/v1.3复制到/production/live
考虑到通过 cli 和缓存失效更新 CloudFront 分发设置并不容易:
你有什么推荐的?有没有更好的方法来处理这种情况?
【问题讨论】:
-
第二种解决方案的唯一问题是缓存。即使您更改了存储桶的内容,Cloudfront 仍可能从缓存中提供旧版本
-
@albanx,你是怎么解决这个问题的?我是第一次实现这个,并且一直倾向于第一种方法,更新原始路径。但是 AWS cloudfront 更新分发看起来有点毛茸茸,所以我有第二个想法......
-
@CharlesO。我在这里的部署脚本pastebin.com/wHJ5MN3D 基本上是第一个解决方案,通过将 index.html 从构建目录复制到 s3 根目录,还有一个额外的步骤,还要注意角度构建选项,它们定义了输出目录和部署url,影响 index.html
标签: angular amazon-s3 static amazon-cloudfront