web-dev-qa-db-ja.com

より高速なs3バケットの複製

s3cmd よりも、バケットを複製するためのより良いコマンドラインツールを見つけようとしています。 s3cmdは、各ファイルをダウンロードおよびアップロードせずにバケットを複製できます。 s3cmdを使用してバケットを複製するために通常実行するコマンドは次のとおりです。

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

これは機能しますが、APIを介して各ファイルを1つずつコピーするため、非常に低速です。 s3cmdが並列モードで実行できれば、とてもうれしいです。

s3cmdよりも高速なバケットを複製するために人々が使用するコマンドラインツールまたはコードとして利用可能な他のオプションはありますか?

編集: s3cmd-modification はまさに私が探しているもののように見えます。残念ながら機能しません。他のオプションはありますか?

86
Sean McCleary

AWS CLIは完璧に仕事をしているようで、公式にサポートされているツールであるというボーナスがあります。

aws s3 sync s3://mybucket s3://backup-mybucket

http://docs.aws.Amazon.com/cli/latest/reference/s3/sync.html

デフォルトで同時転送をサポートします。 http://docs.aws.Amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests を参照してください

膨大な数の小さなファイルをすばやく転送するには、EC2インスタンスからスクリプトを実行して遅延を減らし、max_concurrent_requests待ち時間の影響を軽減します。例えば:

aws configure set default.s3.max_concurrent_requests 200
146
python1981

AWSコンソールの使用を気にしない場合は、次のことができます。

  1. 最初のバケット内のすべてのファイル/フォルダーを選択します
  2. [アクション]> [コピー]をクリックします
  3. 新しいバケットを作成して選択します
  4. [アクション]> [貼り付け]をクリックします

それはまだかなり遅いですが、あなたはそれを放っておいて、それをやらせることができます。

65
deadwards

AWSウェブコンソールを使用して2つのバケットのクローンを作成しようとしました。s3cmdおよびAWS CLI。これらの方法はほとんどの場合機能しますが、非常に遅くなります。

次に、s3s3mirror:2つのS3バケットを同期するための専用ツール。マルチスレッドであり、私が試した他のアプローチよりもはるかに高速です。 AWSリージョン間でギガバイトのデータをすばやく移動しました。

https://github.com/cobbzilla/s3s3mirror で確認するか、 https://registry.hub.docker.com/u/pmoust/s3s3mirrorからDockerコンテナーをダウンロードします/

23
Ketil

アドホックソリューションの場合は、aws cliを使用してバケット間で同期します。

aws s3 sync速度は以下に依存します:
-S3エンドポイントへのAPI呼び出しの遅延
-並行して行われたAPI呼び出しの量

同期速度を上げるには:
-AWSインスタンスからaws s3 syncを実行します(FreeBSDのc3.largeは問題ありません;-))
-〜/ .aws/configを以下で更新します:
-max_concurrent_requests = 128
-max_queue_size = 8096

次の設定とインスタンスタイプを使用すると、474秒以内にバケット(309GB、72Kファイル、us-east-1)を同期できました。

より一般的なソリューションについては、AWS DataPipeLineまたはS3クロスリージョンレプリケーションを検討してください。

9
Tom Lime

これは、このテーマに関するGoogleの最初のヒットに関するものであり、追加情報を追加します。

「Cyno」はs3cmd-modificationの新しいバージョンを作成しました。これは、並列バケット間同期をサポートするようになりました。まさに私が待っていたもの。

プルリクエストは https://github.com/pcorliss/s3cmd-modification/pull/2 、彼のバージョンは https://github.com/pearltrees/s3cmd-modification

3

他のS3コマンドラインツールは知りませんが、ここに何も表示されない場合は、独自のS3コマンドラインツールを作成するのが最も簡単かもしれません。

好きな言語とAmazon SDK/Toolkitを選択してください。次に、ソースバケットの内容をリスト/取得し、各ファイルをコピーするだけです(明らかに並行して)

s3cmd-modification のソースを見ると(そしてPythonについて何も知らないことを認めます)、バケットからバケットへのコードを並列化していないようですが、おそらく標準のアップロード/ダウンロードを使用できますこれを行うための出発点としての並列コード。

3
Geoff Appleford