web-dev-qa-db-ja.com

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

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

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

86
Andrew

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

AWSコンソール も適切なアクセス許可のセットアップで実行できると思われますが、これはテストしていません。

また、 AWS API を使用して、 書き込み許可 を使用しているAWSアカウントを宛先バケットに指定している場合にも実行できます。

21
Geoff Appleford

はい、方法があります。見つけるのは難しいですが、非常に簡単です。 8)

たとえば、最初のアカウントのユーザー名が[email protected]で、2番目のアカウントのユーザー名が[email protected]であるとします。

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側で行われます。

122
side2k

aws cli (ubuntu 14 ec2インスタンスを使用しました)を使用して、次のコマンドを実行します。

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

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

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

58
Programster

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

5
Rose Perrone

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

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

3

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

移行元アカウントと移行先アカウントの2つのアカウントがあると考えてみましょう。そして、2つのバケットsource-bucketおよびdestination bucket。すべてのファイルをsource-bucketからdestination-bucketに移動します。次の手順で実行できます。

  1. aws configure
    • 認証情報またはIAMロールを使用して宛先アカウントを設定します。
  2. 宛先アカウントユーザーのユーザーポリシーを作成します。
  3. ソースバケットポリシーを変更し、宛先アカウントユーザーポリシーを追加することにより、宛先ユーザーにソースバケットへのアクセスを許可します。この方法により、宛先ユーザーはsource-bucketにアクセスできます。
  4. aws s3 ls s3://source-bucket/
    • これにより、宛先アカウントが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
    • これにより、すべてのファイルがsource-bucketからdestination-bucketに移動します。

別の方法として、syncコマンドを使用できます-aws s3 sync s3://source-bucket s3://detination-bucket

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

2
anand tripathi

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

2
Marco Delavegua

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

2
Gatorhall

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

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

1
curious_george