![如何将 S3 存储桶移动到不同位置](https://linux22.com/image/511648/%E5%A6%82%E4%BD%95%E5%B0%86%20S3%20%E5%AD%98%E5%82%A8%E6%A1%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%8D%E5%90%8C%E4%BD%8D%E7%BD%AE.png)
我们使用 S3 存储 Web 应用中的数百万条条目,现在我们将所有内容移至 EC2、欧盟服务器,并且我们还想将 S3 数据移至欧盟。但我们使用的存储桶位于美国,似乎没有工具可以将整个存储桶内容移至不同的存储桶。
当我们切换到 EU bucket 时,还存在如何同步数据的问题,这些数据将在迁移运行时同时创建。
答案1
新官员AWS CLI本机支持的大部分功能s3cmd
。
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1 --region us-west-2
答案2
我想,你可以运行:
s3cmd --recursive cp s3://oldbucket/ s3://newbucket
应该直接复制吧。
答案3
我不知道有哪个打包的解决方案可以做到这一点,但它本质上只是一个存储桶列表,然后将每个对象从美国存储桶复制到欧盟存储桶。PUT-copy API 支持“if-modified-since”和“if-none-match”,因此您可以重复运行它而无需重复工作: http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/index.html?RESTObjectCOPY.html
对于实时迁移,我建议采用以下方法:
- 可选的第一步:如果您有大量数据需要迁移,请考虑使用 AWS Import/Export 在美国的物理设备上捕获数据的第一个快照,然后将其物理运送到欧盟。这可以节省您的时间和金钱。
- 按照上述方法,使用 if-modified-since 或 if-none-match 设置脚本,将数据从美国迁移到欧盟。使其足够智能,不会用陈旧的美国数据破坏新的欧盟数据(一旦您进入下面的第 5 步)。循环连续运行它,直到两个存储桶处于大致相同的状态。
- 修改您的 Web 应用程序以同时将数据放入美国和欧盟存储桶,同时继续仅从美国获取数据。
- 继续运行迁移脚本,直到您确信存储桶处于完全相同的状态(或者尽可能接近,以实现最终的一致性)。
- 再次修改 Web 应用程序以仅从 EU 存储桶获取数据。
- 您现在可以关闭迁移脚本。
- 寻找最终一致性异常并清除它们。
- 修改 Web 应用程序以停止将数据放入美国存储桶。
- 删除美国存储桶中的所有内容。
您可能希望在迁移期间在 EU 存储桶上使用 S3 低冗余存储以获得更便宜的数据速率和更快的响应时间,因为数据只是美国数据的副本。
答案4
我已经用 S3 做了大量的工作,但从未遇到过可以原生执行此操作的工具。不过,使用几个s3cmd-同步同步脚本以使两个存储桶彼此同步。