S3アカウント間でファイルを直接移動しますか?


90

かなり基本的な質問ですが、答えを見つけることができませんでした。Transitを使用すると、あるAWSアカウントの1つのS3バケットから別のAWSアカウントの別のS3バケットにファイルを「移動」できますが、実際には、最初のファイルからファイルをダウンロードし、2番目のファイルにアップロードします。

間にファイルをダウンロードせずに、S3アカウント間でファイルを直接移動する方法はありますか?

回答:


22

既製のソリューションを探しているだけの場合、これを実行できるソリューションがいくつかあります。バケットエクスプローラーはMacとWindowsで動作し、Cloudberry S3エクスプローラーS3ブラウザーと同様にアカウント間でコピーできますが、これらはWindowsのみであるため、機能しない場合があります。

私は疑うAWSコンソールはまた、適切なアクセス権の設定でそれを行うことができますが、私はこれをテストしていません。

宛先バケットへの書き込み権限を使用しているAWSアカウントを付与している限り、AWS APIを使用してそれを行うこともできます。


バケットエクスプローラーの+1。アカウント間でバケットをコピーするには、AWS管理コンソールやs3cmdよりもはるかに簡単です。:方向の第2のセットは彼らの無料トライアルを私のために働いた bucketexplorer.com/documentation/...
LennonR

Cloudberryは進むべき道です。無料です。さらに、セットアップがさらに簡単になった後は、ドラッグアンドドロップが簡単です。いいえ、私はそこでは働きません:)
スキダドン

3
Bucket Explorerはデータをダウンロードして再アップロードしますか、それともAmazonサーバー間で直接データを移動しますか?
Wouter

Cloudberryの試用版(少なくともバージョン5.0.0.32)には5GBの転送制限があることに注意してください!
DarthPablo 2017

123

はい、方法があります。そして、それを見つけるのは難しいですが、それはかなりシンプルです。8)

たとえば、最初のアカウントのユーザー名がacc1@gmail.comで、2番目がacc2@gmail.comであるとします。

オープンAWS Management Consoleの ACC1として。Amazon S3バケットのプロパティに移動し、[Permissions]タブで[Add more permissions]をクリックします。次に、「認証済みユーザー」のリストおよび表示権限を追加します。

次に、acc2のAWS IAM(コンソールタブからアクセス可能)で、S3バケットへのフルアクセス権を持つユーザーを作成します(より安全にするために、正確なアクセス許可を設定できますが、転送用の一時ユーザーを作成することをお勧めします)削除します)。

次に、s3cmdを使用して(acc2で新しく作成されたユーザーの資格情報を使用)、次のようなことを実行できます。

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

すべての転送は、Amazon側で行われます。


8
すばらしいヒントです。バケット全体をアラで同期rsyncするためにも使用できますs3cmd sync s3://acc1_bucket s3://acc2_bucket
lllllll 2014年

6
ターゲットからホストにファイルをコピーするときに403 AccessDeniedに問題がある場合は、この投稿を参照してください。それを行う別の方法があるかもしれませんが、ここでの結果は私にとってうまくいきました。 alfielapeter.com/posts/...
crlane

やや大きいバケツはどうですか?50GBの領域では、何か問題はありますか?
ianstarz 2014年

4
s3cmd自作でもインストール可能、fyi
ianstarz

3
宛先バケットがファイルをパブリックに提供することを意図している場合.. --acl-publicそれ以外の場合は追加する必要がある場合があります。すべてのファイルはプライベートです(少なくとも、コマンドを実行したときは私用でした)。非常に多くのプライベートファイルがあるため、それらをすべてパブリックにするためにバケットにポリシーを追加する必要がありました
2015年

58

使用のAWS CLIを(私は14 EC2インスタンスのUbuntuを使用)し、ちょうど次のコマンドを実行します。

aws s3 sync s3://bucket1 s3://bucket2

一方のアカウントの詳細を指定する必要があり、もう一方へのパブリック書き込みアクセスまたはパブリック読み取りアクセスを持っています。

これにより、2つのバケットが同期されます。後でもう一度同じコマンドを使用して、すばやく同期できます。最良の部分は、帯域幅を必要としないように見えることです(たとえば、ファイルがローカルコンピューターを通過しないなど)。


3
非常に大きなバケツで私はこれで運が良かった。s3cmdは、最初のバケット内のファイルのリストの生成を停止しているように見えました。出来上がったかもしれませんが焦りました。
2014年

2
私は同じ経験をしました。なんらかの理由で、aws s3 syncは約1桁速く実行されているようですs3cmd cp
pix0r 2014

2
これでうまくいきました。権限の問題が発生した--grants場合は、オプションを使用してみてください。ドキュメントの詳細:docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen

3
同期時に権限はコピーされないため、を指定する必要があります--grants。大量のデータをコピーした後でこれを学び、新しいバケットへの同期をやり直す必要がありました。--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersパブリックユーザーの読み取り権限を設定します。
Dan Sandland、2015年

これはs3cmd私よりも約10倍速く実行され、将来コマンドを再実行する必要がある場合、すべてを再コピーするのではなく、変更ファイルを同期することもできます。
nfm 2015

5

botoはうまく機能します。このスレッドを参照してください。botoを使用すると、オブジェクトをローカルマシンにダウンロードして別のバケットにアップロードするのではなく、オブジェクトをバケット間で直接コピーできます。


3

Mac OS XIでは、PanicのTransmitアプリを使用しました。S3アカウントごとに1つのウィンドウを開きました(APIキーとシークレットを使用)。次に、あるウィンドウの1つのバケットから別のウィンドウの別のバケットにドラッグできます。最初にローカルでファイルをダウンロードする必要はありません

Andrewは正解です。Transmitはローカルでファイルをダウンロードしてから、ファイルをアップロードします。


2
私は送信していますが、あなたが説明している転送が一時フォルダにファイルをダウンロードしてから、他のサーバーにアップロードするという99%の確信があります。ファイルがコンピュータに流れなかったと思いますか?
アンドリュー

1
誰かがこれを確認できますか?
David Mauricio

2
私が確認する。ダウンロードとアップロードを送信します。これはひどく遅くなりますが、適切な所有者の下にコピーされたコンテンツを保存するという大きな利点があります。
Fabio Russo

3

S3ファイルをあるアカウントから別のアカウントに移動する

ソースアカウントと宛先アカウントの2つのアカウントがあるとします。そして、2つのバケットsource-bucketdestination bucket。私たちは、すべてのファイルを移動したいsource-bucketdestination-bucket。次の手順でそれを行うことができます:

  1. aws configure
    • 認証情報またはIAMロールを使用して宛先アカウントを構成します。
  2. 宛先アカウントユーザーのユーザーポリシーを作成します。
  3. ソースバケットポリシーを変更し、そこに宛先アカウントユーザーポリシーを追加して、宛先ユーザーにソースバケットへのアクセス権を付与します。このようにして、宛先ユーザーはソースバケットにアクセスできます。
  4. aws s3 ls s3://source-bucket/
    • これにより、宛先アカウントがソースバケットにアクセスできるかどうかが確認されます。確認のためだけにこれを行います。
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • これにより、source-bucketのすべてのファイルがdestination-bucketにコピーされます。すべてのファイルは--recursiveフラグを使用してコピーされます。
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • これにより、すべてのファイルがソースバケットから宛先バケットに移動します。

代わりに、syncコマンドを使用できます- aws s3 sync s3://source-bucket s3://detination-bucket

より良い説明のためにリンクに従ってください


2

CrossFTPは、S3ファイルをダウンロードすることなく、バケット間で直接コピーできます。これは、Windows、Mac、およびLinuxで動作するGUI S3クライアントです。


4
これは有料版でのみ可能であることに注意してください。これは無料のソリューションではありません。
マイケルブルック

2

Cyber​​duck(オープンソース)を使用できます。


Windowsストアでは、これをダウンロードするために料金がかかりますが、Webサイトから無料で入手できます。AWSアクセスキーIDとシークレットアクセスキーを作成した後、S3ストレージに接続できました。まだ何もコピーしていないことをテストしていませんが、動作するようです。
Wouter 2017年

1

新しく作成されたファイル(既存のオブジェクトではない)の場合、AWSの新機能を利用できます。これは、クロスリージョンレプリケーションです(S3バケットの「バージョン管理」の下)。新しいオブジェクトを別のアカウントのバケットに複製できるようにするポリシーを作成できます。

既存のオブジェクトについては、別の方法を使用してオブジェクトをコピーする必要があります-AWSが将来これにネイティブ機能を導入しない限り。


0

次のように実行することでそれを行うことができます:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. ソースアカウントのソースバケットにバケットポリシーをアタッチします。

  2. AWS Identity and Access Management(IAM)ポリシーを宛先アカウントのユーザーまたはロールにアタッチします。

  3. 移行先アカウントのIAMユーザーまたはロールを使用して、クロスアカウント移動を実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.