如何将S3存储桶移动到其他位置


20

我们使用S3在Web应用程序中存储数百万个条目,现在我们将整个内容移至EC2和EU服务器,我们也希望将S3数据移至EU。但是我们使用的存储桶在美国,并且似乎没有工具可以将整个存储桶中的内容移动到其他存储桶中。

稍后在切换到EU存储桶时,如何同步数据也存在问题,该数据将在迁移运行时同时创建。

Answers:


18

新的官方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

在哪里可以找到地区名称列表?
巴特

您可以在此处找到S3区域:docs.aws.amazon.com/general/latest/gr/rande.html#s3_region 这些与您从中获得的EC2区域几乎相同aws ec2 describe-regions,但us-east-1也被称为S3的美国标准,并且由于历史原因有些不同。
AB:5:

5

我想,您可以运行:

s3cmd --recursive cp s3://oldbucket/ s3://newbucket

它应该直接复制它。


CLI说:“找不到命令”
bart

3

我不知道执行此操作的打包解决方案,但从本质上讲,它只是存储区列表,然后将每个对象从美国存储区复制到欧盟存储区。PUT复制API支持“ if-modified-since”和“ if-none-match”,因此您可以重复运行它而无需花费很多精力:http : //docs.amazonwebservices.com/AmazonS3/2006-03-01/ API / index.html?RESTObjectCOPY.html

对于实时迁移,我建议采用以下方法:

  1. 可选的第一步:如果要迁移的数据量很大,请考虑使用AWS Import / Export在美国的物理设备上捕获数据的第一张快照,然后将其物理运送到欧盟。这样可以节省您的时间和金钱。
    • 设置脚本,以如上所述使用if-modified-since或if-none-match将数据从美国迁移到欧盟。使其足够聪明,不要用过时的美国数据破坏新的欧盟数据(一旦执行下面的第5步)。连续不断地运行它,直到两个存储桶处于大致相同的状态。
    • 修改您的Web应用程序以将PUT数据同时存储到美国和欧盟存储桶中,同时继续仅从美国获取数据。
    • 继续运行迁移脚本,直到您确信这些存储桶处于完全相同的状态(或在达到最终一致性的前提下,尽可能地接近)。
    • 再次修改Web应用程序,使其仅从EU存储桶中获取数据。
    • 现在,您可以关闭迁移脚本。
    • 寻找最终的一致性异常并进行清理。
    • 修改Web应用程序以停止将数据放入美国存储桶。
    • 删除美国存储桶中的所有内容。

迁移期间,您可能希望在EU存储桶上使用S3减少冗余存储,以获取更便宜的数据速率和更快的响应时间,因为这些数据只是美国数据的重复。



0

我已经使用S3做了大量的工作,但从未遇到过可以原生执行此操作的工具。但是,使用几个s3cmd-sync同步脚本来保持两个存储桶彼此同步并不是很困难。


是的,这可行,但是需要我们在本地下载所有内容,而S3 API支持移动/复制条目而不下载它们。
skrat 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.