首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除S3中的旧文件

删除S3中的旧文件
EN

Stack Overflow用户
提问于 2021-01-16 14:14:57
回答 2查看 945关注 0票数 0

我正在使用AWS代码构建和缓存通过AWS S3在AWS CloudFront中部署我的react应用程序,但是由于频繁的部署,桶的大小在一个月内增加到超过10 to

我试图在部署时删除旧的构建文件,但这给在浏览器中缓存旧代码的用户带来了问题。由于旧文件试图获得以前的版本构建,但这些文件被删除,所以它抛出404。

我试图为index.html文件设置无缓存,但这并不能解决这个问题。

有人面临这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2021-02-09 16:51:40

@Nilanth这里是我对类似案例所做的:

我的堆栈也是一个反作用应用程序(业务不那么关键)(它用于为主要内容管理流程提供文章选择的可能性。)app是通过CodeCommit - Codebuild到s3 Bucket构建的,使用CodePipeline & buildspec.yml文件。构建存储库提交触发的它。我也面临着一个类似的问题,Cloudfront没有为浏览器(html)“提供”最新的JS文件,因此它开始感觉像是缓存问题。

我做了这样一个很好的解决方案:

  1. 更新Cloudfront缓存设置(编辑行为,设置为使用“使用旧版缓存设置”),并将min / max TTLs设置为0。(这有助于缓存,因此用户应该立即获得最新版本)
  2. 对于JS / CSS文件问题,我在buildspec.yml文件中添加"aws命令“行,如下所示:
  • aws s3 rm S3:///静态/js/-递归
  • aws s3 rm S3:///静态/css/-递归

将这些设置为pre_build命令注意:通过删除JS文件,您的应用程序在新的应用程序从文件夹/js & /css中再次提供之前不能使用。我您的应用程序是业务关键,那么您可以考虑超越这一点,因为将有30-60年代的时间,该应用程序不能使用。如果构建失败了,那么根本就没有js/css资产,那么您就可以从Codebuild触发旧的构建了。这将需要一些努力来完成业务关键应用的Devops在这里的工作。

  1. 要允许对S3桶执行“删除”,需要授予Codebuild附加权限。转到构建项目,查看环境的服务角色。然后转到IAM / roles /获取正确的角色名称,并给予更多的S3权限,例如AmazonS3FullAccess,这就足够了。

我不确定,这是来自Cloudfront的99%正确的解决方案,但它似乎避免了缓存问题,而且桶大小也很小。

-MM

票数 1
EN

Stack Overflow用户

发布于 2021-01-17 02:32:18

有许多元素可以抛出404,如果它们正在寻找根本原因,则需要一个接一个地证明。

首先,我将尝试存储桶本身,使用<s3-bucket-url>/index.html并查看该文件(在本例中为index.html )是否存在。

其次,cloudfront,我将假设cloudfront发行版配置正确(即/路径重定向到/index.html)。此外,每次编辑桶文件时,都会创建一个无效加速传播

第三,您需要告诉您的用户不断地重新加载页面,或者使用匿名,特别是在您的站点处于不断开发的情况下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65750635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档