[解決済み] S3バケット間でファイルを移動する最適な方法とは?
質問
本番用バケットから開発用バケットに毎日ファイルをコピーしたいのですが、どうすればいいですか?
例えば 本番用バケット/フィード/フィード名/日付をコピーする をdevelopmentbucket/feed/feedname/dateにコピーする。
欲しいファイルがフォルダ構造の奥深くにあるため、各フォルダに移動してコピー&ペーストするのは時間がかかりすぎる。
各バケットにドライブをマウントし、Windows のバッチ スクリプトを書くという方法を試しましたが、これは非常に遅く、すべてのファイル/フォルダーを不必要にローカル サーバーにダウンロードし、再びバックアップすることになります。
どのように解決するのですか?
アップデート
として によって指摘され、alberge (+1) が指摘したように、現在では優れた AWSコマンドラインインターフェース は、AWS の (ほとんど) すべてを操作するための最も汎用的なアプローチを提供します - それは一方でほとんどのサービスの API をカバーし、さらに より高度な S3 コマンド あなたのユースケースを具体的に扱うには、S3コマンドを参照してください。 S3用AWS CLIリファレンス :
-
同期
-
ディレクトリとS3プレフィックスを同期します。
あなたのユースケースをカバーするのは
例2
(さらに細かい使い方は
--exclude
,--include
や接頭辞の処理等も可能です)。以下のsyncコマンドは、s3オブジェクトをコピーすることで、指定したプレフィックスとバケット下のオブジェクトを、別の指定したプレフィックスとバケット下のオブジェクトに同期させるものです。[...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
完全を期すために、この章で紹介した 下位レベルのS3コマンド を使用しても利用可能です。 s3api サブコマンドで利用可能で、SDKベースのソリューションをAWS CLIに直接変換し、最終的にはより高いレベルの機能を採用することができます。
最初の回答
S3バケット間のファイルの移動は、以下の方法で実現できます。 PUTオブジェクト - コピーAPI (その後に オブジェクトの削除 ):
このPUT操作の実装は、すでにAmazon S3に保存されているオブジェクトのコピー のコピーを作成します。PUTコピー操作は、GETしてからPUTするのと同じです。 GETを実行し、次にPUTを実行するのと同じです。リクエストヘッダを追加します。 x-amz-copy-sourceを追加すると、PUTオペレーションはソースオブジェクトを宛先バケットにコピーします。 コピー先のバケットにコピーします。 ソース
既存のすべてのAWS SDKについて、それぞれのサンプルが公開されています。
1回の操作でオブジェクトをコピーする
. 当然ながら、スクリプトベースのソリューションが最初の選択肢となります。
AWS SDK for Rubyを使ったオブジェクトのコピー
が良い出発点かもしれません。代わりにPythonを好むなら、同じことが
ボット
を通してももちろん実現できます。
copy_key()
の中で、boto の
S3 API ドキュメント
.
PUT Object
はファイルをコピーするだけなので、ファイルを削除するときは明示的に
DELETE Object
を介して明示的にファイルを削除する必要がありますが、バケツとファイル名を処理する全体的なスクリプトを用意すれば、それは別の数行で済みます (それぞれの例もあります。例えば
リクエストごとに 1 つのオブジェクトを削除する
).
関連
-
[解決済み] Amazon S3はシンボリックリンクをサポートしていますか?
-
[解決済み] ls とワイルドカードを使用して s3 にファイルが存在するかどうかをチェックする
-
[解決済み] S3エラーです。リクエスト時刻と現在時刻の差が大きすぎます。
-
[解決済み] Amazon S3 boto - フォルダを作成する方法は?
-
[解決済み] S3とAWSコンソールでサブフォルダーを含むフォルダーをアップロードする
-
[解決済み] Amazon S3コンソール: 複数のファイルを一度にダウンロードする
-
[解決済み] S3でのファイル名の最大長は?
-
[解決済み] S3 - プリフィックスとは何ですか?そして、どのようなRatelimitsが適用されますか?
-
[解決済み] Amazon AWSの課金上限を設定する方法はありますか?[クローズド]
-
[解決済み] S3にある1万個のファイルを公開する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Amazon S3はシンボリックリンクをサポートしていますか?
-
[解決済み] ls とワイルドカードを使用して s3 にファイルが存在するかどうかをチェックする
-
[解決済み] Amazon S3 boto - フォルダを作成する方法は?
-
[解決済み] AWS S3: ディスクスペースの使用量を確認する方法
-
[解決済み] AWS S3 2つのバケット間でファイルやフォルダをコピーする
-
[解決済み] S3とAWSコンソールでサブフォルダーを含むフォルダーをアップロードする
-
[解決済み] Amazon S3コンソール: 複数のファイルを一度にダウンロードする
-
[解決済み] S3でのファイル名の最大長は?
-
[解決済み] Amazon AWSの課金上限を設定する方法はありますか?[クローズド]
-
[解決済み] S3にある1万個のファイルを公開する方法