かなり基本的な質問ですが、答えを見つけることができませんでした。Transitを使用すると、あるAWSアカウントの1つのS3バケットから別のAWSアカウントの別のS3バケットにファイルを「移動」できますが、実際には、最初のファイルからファイルをダウンロードし、2番目のファイルにアップロードします。
間にファイルをダウンロードせずに、S3アカウント間でファイルを直接移動する方法はありますか?
回答:
既製のソリューションを探しているだけの場合、これを実行できるソリューションがいくつかあります。バケットエクスプローラーはMacとWindowsで動作し、Cloudberry S3エクスプローラー とS3ブラウザーと同様にアカウント間でコピーできますが、これらはWindowsのみであるため、機能しない場合があります。
私は疑うAWSコンソールはまた、適切なアクセス権の設定でそれを行うことができますが、私はこれをテストしていません。
宛先バケットへの書き込み権限を使用しているAWSアカウントを付与している限り、AWS APIを使用してそれを行うこともできます。
はい、方法があります。そして、それを見つけるのは難しいですが、それはかなりシンプルです。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側で行われます。
rsync
するためにも使用できますs3cmd sync s3://acc1_bucket s3://acc2_bucket
。
s3cmd
自作でもインストール可能、fyi
--acl-public
それ以外の場合は追加する必要がある場合があります。すべてのファイルはプライベートです(少なくとも、コマンドを実行したときは私用でした)。非常に多くのプライベートファイルがあるため、それらをすべてパブリックにするためにバケットにポリシーを追加する必要がありました
使用のAWS CLIを(私は14 EC2インスタンスのUbuntuを使用)し、ちょうど次のコマンドを実行します。
aws s3 sync s3://bucket1 s3://bucket2
一方のアカウントの詳細を指定する必要があり、もう一方へのパブリック書き込みアクセスまたはパブリック読み取りアクセスを持っています。
これにより、2つのバケットが同期されます。後でもう一度同じコマンドを使用して、すばやく同期できます。最良の部分は、帯域幅を必要としないように見えることです(たとえば、ファイルがローカルコンピューターを通過しないなど)。
aws s3 sync
は約1桁速く実行されているようですs3cmd cp
。
--grants
場合は、オプションを使用してみてください。ドキュメントの詳細:docs.aws.amazon.com/cli/latest/reference/s3/sync.html
--grants
。大量のデータをコピーした後でこれを学び、新しいバケットへの同期をやり直す必要がありました。--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
パブリックユーザーの読み取り権限を設定します。
s3cmd
私よりも約10倍速く実行され、将来コマンドを再実行する必要がある場合、すべてを再コピーするのではなく、変更ファイルを同期することもできます。
Mac OS XIでは、PanicのTransmitアプリを使用しました。S3アカウントごとに1つのウィンドウを開きました(APIキーとシークレットを使用)。次に、あるウィンドウの1つのバケットから別のウィンドウの別のバケットにドラッグできます。最初にローカルでファイルをダウンロードする必要はありません。
Andrewは正解です。Transmitはローカルでファイルをダウンロードしてから、ファイルをアップロードします。
ソースアカウントと宛先アカウントの2つのアカウントがあるとします。そして、2つのバケットsource-bucket
とdestination bucket
。私たちは、すべてのファイルを移動したいsource-bucket
のdestination-bucket
。次の手順でそれを行うことができます:
aws configure
aws s3 ls s3://source-bucket/
aws s3 cp s3://source-bucket s3://destination-bucket --recursive
aws s3 mv s3://source-bucket s3://destination-bucket --recursive
代わりに、syncコマンドを使用できます- aws s3 sync s3://source-bucket s3://detination-bucket
Cyberduck(オープンソース)を使用できます。
次のように実行することでそれを行うことができます:
aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive
ソースアカウントのソースバケットにバケットポリシーをアタッチします。
AWS Identity and Access Management(IAM)ポリシーを宛先アカウントのユーザーまたはロールにアタッチします。
移行先アカウントのIAMユーザーまたはロールを使用して、クロスアカウント移動を実行します。