如何将S3存储桶移动到不同的位置

我们使用S3在我们的webapp中存储了数百万个条目,现在我们把整个东西移到EC2,EU服务器,我们也想把这个S3数据移到EU。 但我们使用的是在美国的桶,似乎没有工具将整个桶内容移动到不同的桶。

以后在切换到EU桶时如何同步数据也会出现问题,迁移过程中会同时创build数据。

新的官方AWS CLI本身支持s3cmd大部分function。

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 

我想,你可以运行:

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

它应该直接复制它。

我不知道一个打包的解决scheme来做到这一点,但它本质上只是一个桶LIST,然后将每个对象从US桶中复制到EU桶中。 PUT-copy API支持“if-modified-since”和“if-none-match”,所以你可以反复运行而不用重复: http : //docs.amazonwebservices.com/AmazonS3/2006-03-01/ API / index.html的?RESTObjectCOPY.html

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

  1. 可选的第一步:如果要迁移的数据量很大,请考虑使用AWS Import / Export捕获美国物理设备上的第一个数据快照,并将其物理传输到EU。 这可以为您节省时间和金钱。
    • 设置一个脚本,使用if-modified-since或if-none-match将数据从US迁移到EU。 使它足够聪明,不要用陈旧的美国数据来摧毁欧盟的新鲜数据(一旦你到达下面的第5步)。 一直循环运行,直到两个桶大致处于相同的状态。
    • 修改您的网页应用程序,同时将数据同时发送到美国和欧盟的存储桶,同时继续从美国获取数据。
    • 继续运行您的迁移脚本,直到您确信这些存储桶处于完全相同的状态(或尽可能接近您的迁移脚本,并具有最终的一致性)。
    • 再次修改Web应用程序以从EU存储桶中专门获取数据。
    • 您现在可以closures您的迁移脚本。
    • 寻找最终的一致性exception并进行清理。
    • 修改Web应用程序以停止将数据发送到美国存储区。
    • 删除美国桶中的所有东西。

在迁移期间,您可能希望在您的EU存储桶中使用S3 Reduced Redundancy Storage,以获得更便宜的数据速率和更快的响应时间,因为数据只是美国数据的副本。

您也可以考虑设置跨地域复制,这可以让您复制和保持地区之间的数据同步https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon- S3 /

我已经在S3上做了相当多的工作,从来没有遇到过这样的工具。 但是,使用几个s3cmd-sync同步脚本来保持两个桶彼此同步并不难。