s3cmd よりも、バケットを複製するためのより良いコマンドラインツールを見つけようとしています。 s3cmd
は、各ファイルをダウンロードおよびアップロードせずにバケットを複製できます。 s3cmdを使用してバケットを複製するために通常実行するコマンドは次のとおりです。
s3cmd cp -r --acl-public s3://bucket1 s3://bucket2
これは機能しますが、APIを介して各ファイルを1つずつコピーするため、非常に低速です。 s3cmd
が並列モードで実行できれば、とてもうれしいです。
s3cmd
よりも高速なバケットを複製するために人々が使用するコマンドラインツールまたはコードとして利用可能な他のオプションはありますか?
編集: s3cmd-modification はまさに私が探しているもののように見えます。残念ながら機能しません。他のオプションはありますか?
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
AWSコンソールの使用を気にしない場合は、次のことができます。
それはまだかなり遅いですが、あなたはそれを放っておいて、それをやらせることができます。
AWSウェブコンソールを使用して2つのバケットのクローンを作成しようとしました。s3cmd
およびAWS CLI。これらの方法はほとんどの場合機能しますが、非常に遅くなります。
次に、s3s3mirror
:2つのS3バケットを同期するための専用ツール。マルチスレッドであり、私が試した他のアプローチよりもはるかに高速です。 AWSリージョン間でギガバイトのデータをすばやく移動しました。
https://github.com/cobbzilla/s3s3mirror で確認するか、 https://registry.hub.docker.com/u/pmoust/s3s3mirrorからDockerコンテナーをダウンロードします/
アドホックソリューションの場合は、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クロスリージョンレプリケーションを検討してください。
これは、このテーマに関するGoogleの最初のヒットに関するものであり、追加情報を追加します。
「Cyno」はs3cmd-modificationの新しいバージョンを作成しました。これは、並列バケット間同期をサポートするようになりました。まさに私が待っていたもの。
プルリクエストは https://github.com/pcorliss/s3cmd-modification/pull/2 、彼のバージョンは https://github.com/pearltrees/s3cmd-modification
他のS3コマンドラインツールは知りませんが、ここに何も表示されない場合は、独自のS3コマンドラインツールを作成するのが最も簡単かもしれません。
好きな言語とAmazon SDK/Toolkitを選択してください。次に、ソースバケットの内容をリスト/取得し、各ファイルをコピーするだけです(明らかに並行して)
s3cmd-modification のソースを見ると(そしてPythonについて何も知らないことを認めます)、バケットからバケットへのコードを並列化していないようですが、おそらく標準のアップロード/ダウンロードを使用できますこれを行うための出発点としての並列コード。