设置缓存控制整个S3桶自动(使用水桶政策?)设置缓存控制整个S3桶自动(使用水桶政策?)(Set c

2019-05-13 19:42发布

我需要设置缓存控制标头为整个S3存储,包括现有的和未来的文件,并希望能做到这一点的水桶政策。 我知道我可以编辑现有的,我知道如何指定他们在放,如果我上传他们自己但不幸的是,因为它使用s3fs到其中的文件复制上传他们的应用程序无法设置头。

Answer 1:

现在有3种方式来完成这件事: 通过AWS控制台通过命令行 ,或通过s3cmd命令行工具


AWS控制台的说明

这是现在推荐的解决方案。 它是直线前进,但它可能需要一些时间。

  • 登录到AWS管理控制台
  • 进入S3桶
  • 通过选择路由的所有文件
  • 选择“更多”,从菜单
  • 选择“更改元数据”
  • 在“密钥”字段中,从下拉菜单中最大年龄= 604800Enter(7天)的价值选择“的Cache-Control”
  • 按“保存”按钮

( 感谢@biplob -请在下面给他一些爱 )


AWS命令行解决方案

原来,当我创造了这个水桶政策是一个没有去,所以我想通了如何使用AWS-CLI来做到这一点,这是非常漂亮的。 研究当我找不到在野外任何的例子,所以我想我会发表我的一些解决方案来帮助那些需要的人。

注:默认情况下,AWS-CLI只复制文件的当前元数据,即使您指定新的元数据。

若要使用命令行上指定的元数据,你需要添加“--metadata-指令替换”标志。 这里有一些例子。

对于单个文件

aws s3 cp s3://mybucket/file.txt s3://mybucket/file.txt --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public

对于整个桶(注意--recursive标志):

aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public

小疑难杂症,我发现,如果你只是想将它应用到特定的文件类型,你需要排除的所有文件,然后包括你想要的人。

只有JPG和PNG格式:

aws s3 cp s3://mybucket/ s3://mybucket/ --exclude "*" --include "*.jpg" --include "*.png" \
--recursive --metadata-directive REPLACE --expires 2034-01-01T00:00:00Z --acl public-read \
--cache-control max-age=2592000,public

下面是一些链接到手册,如果你需要更多的信息:

  • http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
  • http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html#options

已知的问题:

"Unknown options: --metadata-directive, REPLACE"

这可以通过一个过时的awscli原因引起-见@下面eliotRosewater的答案


S3cmd工具

S3cmd是“用于管理Amazon S3和CloudFront的服务命令行工具”。 虽然这种解决方案需要一个混帐拉这可能是一个更简单,更全面的解决方案。

有关完整说明, 请参见下面的@ ashishyadaveee11的帖子


希望能帮助到你!



Answer 2:

现在,它可以从AWS控制台轻易改变。

  • 登录到AWS管理控制台
  • 进入S3桶
  • 通过选择路由的所有文件
  • 选择“更多”,从菜单
  • 选择“更改元数据”
  • 在“密钥”字段中,从下拉菜单中选择“缓存控制”
  • 最大年龄= 604800Enter(7天)的值
  • 按“保存”按钮

这需要时间来执行取决于你的水桶文件。 从头开始重做一遍,如果你不小心关闭浏览器。



Answer 3:

脚步

  1. git clone https://github.com/s3tools/s3cmd
  2. 运行s3cmd --configure (你将被要求提供这两个键-复制并确认电子邮件或您的亚马逊帐户页粘贴复制时,他们要小心,他们是大小写敏感的,必须准确输入,否则你会继续! 。获取有关无效签名或类似的错误,只要加入s3:ListAllMyBuckets权限的密钥,否则你会得到一个AccessDenied而测试访问错误)。
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/


Answer 4:

我不认为你可以在斗级别指定这一点,但也有对你的几个解决方法。

  1. 对象复制到其自身 S3上设置适当cache-control头复制操作。

  2. 在URL中的文件指定响应头 。 您需要使用预先签署的网址为这个工作,但你可以指定查询字符串某些响应头,包括cache-controlexpires 。 有关可用选项的完整列表,请参阅: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225



Answer 5:

是它,我的信誉得分均> 50,我只是发表评论。 但它不是(还),所以这里的另一个完整的答案。


我一直在敲打我的头在这个问题上一段时间。 直到我发现和阅读文档。 分享这里的情况下,它可以帮助别人:

  • 亚马逊CloudFront的文件: 指定对象如何长期停留在一个CloudFront的边缘缓存(过期)

什么结束了对我来说,工作可靠是这个命令。 我选择了1秒的到期时间测试,以验证预期的结果:

aws s3 cp \
  --metadata-directive REPLACE \
  --cache-control max-age=1,s-maxage=1 \
  s3://bucket/path/file \
  s3://bucket/path/file
  • --metadata-directive REPLACE当“是必需的cp ”修饰在S3现有文件元数据
  • max-age设置浏览器缓存年龄,单位为秒
  • s-maxage设置CloudFront的高速缓存,以秒

同样地,如果在上载至S3上的文件设置这些缓存控制标头值,则该命令将如下所示:

aws s3 cp \
  --cache-control max-age=1,s-maxage=1 \
  /local/path/file \
  s3://bucket/path/file


Answer 6:

对那些试图使用丹的答案,并得到错误:

“未知的选项:--metadata-指令,将”

我跑进了问题,问题是,我安装awscli使用

命令和apt-get安装awscli

这种安装了旧版本,缺少--metadata-指令命令awscli的。 所以我用sudo易于得到删除awscli将其删除。

然后重新安装以下从亚马逊的程序: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

唯一的区别是,我不得不用,因为这人可能会遇到同样的权限问题须藤-H。



Answer 7:

您可以随时配置与S3上PUTOBJECT触发拉姆达拉姆达只会改变只是把这个特定对象的报头。

然后你可以运行最后一次上面提到的复制命令,所有的新对象将被拉姆达固定。

更新:

这里是一个很好的地方,从开始: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /



文章来源: Set cache-control for entire S3 bucket automatically (using bucket policies?)