web-dev-qa-db-ja.com

S3バケットを別の場所に移動する方法

私たちは数百万のエントリをWebアプリケーションに格納するためにS3を使用していますが、今度はすべてをEC2、EUサーバーに移動し、そのS3データもEUに移動したいと考えています。しかし、私たちが使用するバケットは米国にあり、バケット全体のコンテンツを別のバケットに移動するツールはないようです。

後でEUバケットに切り替えるときにデータを同期する方法にも問題があります。このデータは、移行の実行中に作成されます。

21
skrat

新しい公式 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
19
A B

私は推測します、あなたは走ることができます:

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

直接コピーする必要があります。

5
Alexey

これを行うためのパッケージ化されたソリューションは知りませんが、基本的にはバケットリストであり、USバケットからEUバケットに各オブジェクトをPUTコピーします。 PUT-copy APIは「if-modified-since」と「if-none-match」をサポートしているため、作業を重複させることなく繰り返し実行できます: http://docs.amazonwebservices.com/AmazonS3/2006- 03-01/API/index.html?RESTObjectCOPY.html

ライブマイグレーションの場合、次のアプローチをお勧めします。

  1. オプションの最初のステップ:移行するデータが大量にある場合は、AWS Import/Exportを使用して、米国内の物理デバイス上のデータの最初のスナップショットをキャプチャし、物理的にEUに発送することを検討してください。これにより、時間とお金を節約できます。
    • 上記のif-modified-sinceまたはif-none-matchを使用して、USからEUにデータを移行するスクリプトを設定します。新鮮なEUデータを古いUSデータで壊さないように十分にスマートにしてください(以下のステップ5に到達したら)。 2つのバケットがほぼ同じ状態になるまで、ループで継続的に実行します。
    • Webアプリを変更して、米国とEUの両方のバケットに同時にデータをPUTし、米国からのみデータを取得し続けます。
    • バケットがまったく同じ状態であると確信できるまで(または結果として一貫性が得られれば、可能な限り近い状態になるまで)移行スクリプトの実行を続けます。
    • 再度Webアプリを変更して、EUバケットからのみデータを取得します。
    • これで、移行スクリプトをオフにすることができます。
    • 結果として生じる一貫性の異常を探し、それらをクリーンアップします。
    • Webアプリを変更して、USバケットへのデータのPUTを停止します。
    • USバケットのすべてを削除します。

データは米国のデータの単なる複製であるため、移行中にEUバケットでS3削減冗長ストレージを使用して、データレートを安くし、応答時間を短縮することができます。

3
user44700

リージョン間レプリケーションのセットアップを検討することもできます。これにより、リージョン間でデータをコピーして同期を保つことができます https://aws.Amazon.com/blogs/aws/new-cross-region-replication- for-Amazon-s3 /

1
jareks

私はS3でかなりの量の作業を行いましたが、これをネイティブで行うツールに出会ったことはありません。ただし、2つのバケットを互いに同期させるために s3cmd-sync 同期スクリプトをいくつか使用することはそれほど難しくありません。

0
EEAA