我有两个S3存储桶 -
production
staging
我想定期刷新staging
存储桶,以便它包含所有最新的production
对象进行测试,因此我使用了aws-cli
,如下所示 -
aws s3 sync s3://production s3://staging
所以现在两个存储桶都有完全相同的文件。
但是,对于任何给定的文件/对象,production
链接有效且staging
没有
e.g。
This works: https://s3-us-west-1.amazonaws.com/production/users/photos/000/001/001/medium/my_file.jpg
This doesn't: https://s3-us-west-1.amazonaws.com/staging/users/photos/000/001/001/medium/my_file.jpg
staging
存储桶的对象不是公共链接,默认情况下是私有的。
有没有办法纠正这个或使用aws-cli
避免这种情况?我知道我可以更改存储桶策略本身,但它之前使用的是所有文件。因此,我想知道复制文件是什么,这改变了他们的可见性。
谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
刚做了一些研究。
Frédéric的答案是正确的,但只是想进一步扩展。
默认情况下, aws s3 sync
并非真正的“同步”。它只是遍历源存储桶中的每个文件,并将文件复制到目标存储桶
--force
标志来强制覆盖,但显然不存在--delete
标志将允许您执行此操作--acl public-read
会将目标权限设置为公开可读,但这有两个问题 - (1)它只是盲目地为所有文件设置,你可能不需要,以及(2)它不起作用当你有几个不同权限的文件时。有一个issue about it here和一个PR已经公开但截至今天尚未合并。
因此,如果您尝试像我一样进行完全盲目刷新以进行测试,那么最好的选择就是
右键单击控制台并点击staging
Empty
广告管理
运行同步并盲目地将所有内容设置为public-read
(其他可见性选项可用,请参阅文档here)。 - aws s3 sync s3://production s3://staging --acl public-read