为整个S3存储桶自动设置caching控制(使用存储桶策略?)

我需要为整个s3存储区(现有和将来的文件)设置caching控制标题,并希望在存储桶策略中执行此操作。 我知道我可以编辑现有的,我知道如何指定他们,如果我自己上传,但不幸的是,上传他们的应用程序无法设置标题,因为它使用s3fs复制文件。

据我所知桶政策,仍然是一个不行,但我想如何使用aws-cli做到这一点,它是非常光滑的。 在研究中我找不到任何野外的例子,所以我想我会张贴一些我的解决scheme来帮助那些需要帮助的人。

注:默认情况下,aws-cli仅复制文件的当前元数据,即使您指定了新的元数据。

要使用命令行中指定的元数据,您需要添加'–metadata-directive REPLACE'标志。 这里有一些例子。

对于单个文件

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 

对于整个桶(注 – recursion标志):

 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 

有一点我发现,如果你只想把它应用到一个特定的文件types,你需要排除所有的文件,然后包括你想要的。

只有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 

如果您需要更多信息,请点击以下链接:

希望能帮助到你!

脚步

  1. git clone https://github.com/s3tools/s3cmd
  2. 运行s3cmd --configure (您将被要求提供两个密钥 – 从您的确认电子邮件或您的亚马逊账户页复制并粘贴它们。复制它们时要小心!它们区分大小写,必须准确input,否则您将保留获取有关无效签名或类似错误的信息,请记住将s3:ListAllMyBuckets权限添加到密钥中,否则在testing访问权限时将出现AccessDenied错误。
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

我不认为你可以在桶级别指定,但有几个解决方法。

  1. 在S3上将对象复制到自身 ,为复制操作设置适当的cache-control标题。

  2. 在URL中指定响应头文件 。 你需要使用预先签名的URL来工作,但你可以在querystring中指定特定的响应头,包括cache-controlexpires 。 有关可用选项的完整列表,请参阅: http : //docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225

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

“未知选项:–metadata-directive,REPLACE”

我遇到了这个问题,问题是我安装了awscli使用

sudo apt-get install awscli

这安装了缺less–metadata-directive命令的旧版本的awscli。 所以我用sudo apt-get remove awscli删除它。

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

唯一的区别是我不得不使用sudo -H,因为其他人可能遇到的权限问题也会使用sudo -H。

你总是可以在S3上用PUT​​OBJECTconfiguration一个带有触发器的lambdaexpression式,lambda只是简单的改变这个特定对象的头部。

然后你可以运行上面提到的复制命令,所有的新对象都会被lambda修复。

更新:

这是一个很好的起点: https : //www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /

现在,它可以从AWS控制台轻松更改。

  • login到AWSpipe理控制台
  • 进入S3桶
  • 按路线select所有文件
  • 从菜单中select“更多”
  • select“更改元数据”
  • 在“Key”字段中,从下拉菜单中select“Cache-Control”
  • 最大年龄= 604800input(7天)的价值
  • 按“保存”button

执行时间取决于您的存储桶文件。 如果您不小心closures浏览器,请重新开始。