为整个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
如果您需要更多信息,请点击以下链接:
- http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
- http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html#options
希望能帮助到你!
脚步
-
git clone https://github.com/s3tools/s3cmd
- 运行
s3cmd --configure
(您将被要求提供两个密钥 – 从您的确认电子邮件或您的亚马逊账户页复制并粘贴它们。复制它们时要小心!它们区分大小写,必须准确input,否则您将保留获取有关无效签名或类似错误的信息,请记住将s3:ListAllMyBuckets
权限添加到密钥中,否则在testing访问权限时将出现AccessDenied
错误。 -
./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
我不认为你可以在桶级别指定,但有几个解决方法。
-
在S3上将对象复制到自身 ,为复制操作设置适当的
cache-control
标题。 -
在URL中指定响应头文件 。 你需要使用预先签名的URL来工作,但你可以在querystring中指定特定的响应头,包括
cache-control
和expires
。 有关可用选项的完整列表,请参阅: 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上用PUTOBJECTconfiguration一个带有触发器的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浏览器,请重新开始。