web-dev-qa-db-ja.com

S3バケット全体をダウンロードしますか?

AWSマネジメントコンソールからS3バケット全体をダウンロードすることはできないようです。

私のバケツの1つにすべてをつかむ簡単な方法はありますか?私はルートフォルダをパブリックにし、wgetを使ってそれをすべてプライベートにすることを考えていましたが、もっと簡単な方法があるかどうかわかりません。

534
rugbert

AWS CLI

AWS CLIのドキュメント

AWSは最近、コマンドラインツールをリリースしました。これはbotoのように機能し、Sudo easy_install awscliまたはSudo pip install awscliを使ってインストールすることができます。

インストールが完了したら、次のように実行するだけです。

Command

aws s3 sync s3://mybucket .

出力

download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt

これにより、すべてのファイルがダウンロードされます(一方向同期)。現在のディレクトリ内の既存のファイルをnot削除し( --delete を指定しない限り)、S3上のファイルを変更または削除することはありません。

S3バケットからS3バケット、またはローカルからS3バケットへの同期も可能です。

ドキュメントと他の例をチェックしてください。

http://docs.aws.Amazon.com/cli/latest/reference/s3/sync.html

1022
Layke

バケツをダウンロードするには s3cmd を使用できます。

s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder

更新

Rclone と呼ばれる他のツールがあります。以下はRcloneドキュメントのコードサンプルです。

rclone sync /home/local/directory remote:bucket
157
Phil M.

私はs3cmdを含め、Amazon S3データをローカルマシンにコピーするためにいくつかの異なる方法を使用しましたが、最も簡単な方法は Cyber​​duck です。あなたがする必要があるのはあなたのAmazon資格情報を入力してあなたのバケツ/フォルダー/ファイルのいずれかをダウンロード/アップロード/同期するために単純なインターフェースを使うことだけです。

Screenshot

73
wedocando

これを行うには基本的に多くのオプションがありますが、最良の方法はAWS CLIを使用することです

これがチュートリアルです。

  • ステップ1

お使いのマシンにAWS CLIをダウンロードしてインストールします

MSIインストーラーを使用してAWS CLIをインストールする(Windows)

バンドルインストーラを使用してAWS CLIをインストールする(Linux、OS X、またはUnix)

  • ステップ2

AWS CLIを設定する

enter image description here

アカウント作成時に受け取った有効なアクセスキー秘密キーを必ず入力してください

  • ステップ3

次のコマンドでs3バケットを同期する

aws s3 sync s3://yourbucket /local/path

上記のコマンドを次のデータに置き換えます。

yourbucket >>ダウンロードしたいs3バケット

/ local/path >>すべてのファイルをダウンロードしたいローカルシステムのパス

お役に立てれば!

36
Darshan Lila

AWS S3 CLIを使用してダウンロードするには:

aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive

コードを使用してダウンロードするには、 AWS SDK を使用します。

GUIを使用してダウンロードするには、 Cyber​​duck を使用します。

それが役に立てば幸い.. :)

35
Sarat Chandra

S3ブラウザは私が見つけた最も簡単な方法です。それは優秀なソフトウェアです...そしてそれは非商業的使用のために無料です。 Windowsのみ.

http://s3browser.com/ /

17
dworrad

Visual Studioを使用している場合は、 http://aws.Amazon.com/visualstudio/ をダウンロードしてください。

インストール後、[Visual Studio] - [AWS Explorer] - [S3] - [Your bucket]に移動し、[ダブルクリック]をクリックします。

ウィンドウで、あなたはすべてのファイルを選択することができるでしょう。ファイルを右クリックしてダウンロードします。

16
Ives.me

osxユーザー 、を助けることができるもう一つのオプションは transmit です。それはまたあなたのs3ファイルに接続することを可能にするftpプログラムです。そしてそれは フォルダとしてのftpまたはs3ストレージをマウントするオプションを持っています Finderに。しかし、それは限られた期間だけのためのものです。

9
Diederik

私はs3のために少し開発をしました、そして、私はバケツ全体をダウンロードする簡単な方法を見つけませんでした。 Javaでコーディングしたい場合は、jets3t libを使用してバケットのリストを作成し、そのリストを反復処理してダウンロードします。

http://jets3t.s3.amazonaws.com/downloads.html

最初にAWS管理領事館から公開秘密鍵セットを取得して、S3serviceオブジェクトを作成できるようにします。

AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);

それからあなたのバケツオブジェクトの配列を取得してください...

S3Object[] objects = s3Service.listObjects(YourBucketNameString);

最後に、このコードを使用してオブジェクトを一度に1つずつダウンロードするためにその配列を反復処理します。

S3Object obj = s3Service.getObject(bucket, fileName);
            file = obj.getDataInputStream();

接続コードをスレッドセーフなシングルトンに入れました。明白な理由で必要なtry/catch構文は省略されています。

Pythonでコードを書くのであれば、代わりにBotoを使うことができます。

PS BucketExplorerを見回した後に私はあなたが欲しいものをやる。 https://forums.aws.Amazon.com/thread.jspa?messageID=248429

8
jeremyjjbrown

AWS CLI :でこのコマンドを使用します。

aws s3 cp s3://bucketname. --recursive
7
ashack

@Laykeによる回答は良いですが、大量のデータがあり、永遠に待ちたくない場合は、 この記事をよく読んでください。並列化 。次のコマンド100,000ジョブをジョブ(各小ファイルやマルチコピーの一部)を実行し、先読みする千個のスレッドを使用するAWS CLIを教えてくれます。

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

次のようにこれらを実行した後、簡単なsyncコマンドを使用することができます。

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

または

aws s3 sync s3://source-bucket/source-path c:\my\local\data\path

CPU 4コアと16ギガバイトのRAMを搭載したシステムでは、鉱山(3〜50ギガバイトのファイル)のような例の同期/コピー速度は、700 +のMIB /秒程度9.5MiB/sからデフォルトの設定を超える70Xの高速化を行ってきました。

7
James

あなたがS3FoxでFirefoxを使うならば、それはあなたがすべてのファイルを選択することを可能にし(shift-select firstとlast)そしてすべてを右クリックしてダウンロードします。

4
jpwynn

そこにファイルしかない(サブディレクトリがない)場合は、すべてのファイル(最初はclick、最後はShift+click)を選択し、Enterまたはright clickを押してOpenを選択します。ほとんどのデータファイルでは、これはあなたのコンピュータに直接それらをダウンロードするでしょう。

3

別のGUIオプションを追加するには、 WinSCPのS3機能 を使用します。接続は非常に簡単で、UIにアクセスキーと秘密キーだけが必要です。その後、入れ子になったフォルダの再帰的なダウンロードなど、アクセス可能な任意のバケットから必要なファイルを参照してダウンロードできます。

セキュリティを介して新しいソフトウェアをクリアするのは難しいことであり、WinSCPはかなり普及しているので、より専門的なユーティリティをインストールしようとするよりも単にそれを使用することが本当に有益な場合があります。

3
bsplosion

https://github.com/minio/mc :でこれを実行できます。

mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir

mCはまた、セッション、再開可能なダウンロード、アップロードなどをサポートしています。 mcは、Linux、OS X、およびWindowsオペレーティングシステムをサポートしています。 Golangで書かれ、Apacheバージョン2.0の下でリリースされました。

3

Windowsの場合、私がこれに推奨するGUIツールはCloudberry Explorer for S3です。 http://www.cloudberrylab.com/free-Amazon-s3-Explorer-cloudfront-IAM.aspx 。かなり洗練されたファイルエクスプローラ、FTPのようなインターフェイスを持っています。

3
fundead

AWS sdk APIは、フォルダ全体をアップロードしてs3にリポジトリし、s3のバケット全体をローカルにダウンロードする場合にのみ最適なオプションです。

S3にフォルダ全体をアップロードするため

aws s3 sync . s3://BucketName

ローカル全体のダウンロード

aws s3 sync s3://BucketName . 

ダウンロードするs3の特定のフォルダのBucketName/Pathのようにパスを割り当てることもできます。

2
Harsh Manvar

s3cmd commandで簡単に入手できます。

s3cmd get --recursive --continue s3://test-bucket local-directory/
1
Hubbitus

aws syncは完璧な解決策です。双方向ではありません..送信元から送信先への一方通行です。また、バケツの中にたくさんのアイテムがある場合は、ダウンロードが速くなるように(ダウンロードはインターネット経由ではなくイントラネット経由で行われるため)s3エンドポイントを最初に作成することをお勧めします。

1
Deepak

AWSからバケットをダウンロードするだけの場合は、まずAWS CLIをマシンにインストールします。ターミナルでファイルをダウンロードしたい場所にディレクトリを変更して、このコマンドを実行します。

aws s3 sync s3://bucket-name .

ローカルディレクトリとs3ディレクトリの両方も同期したい場合(ローカルフォルダにファイルを追加した場合)、次のコマンドを実行してください。

aws s3 sync . s3://bucket-name
1
Muzammil

これはすべてのバケツをダウンロードし、それらをリストし、それらの内容をリストするためのものです。

    //connection string
    private static void dBConnection() {
    app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
    conn = new AmazonS3Client(app.getAwsCredentials());
    app.setListOfBuckets(conn.listBuckets());
    System.out.println(CONST.getConnectionSuccessfullMessage());
    }

    private static void downloadBucket() {

    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            app.setBucketKey(objectSummary.getKey());
            app.setBucketName(objectSummary.getBucketName());
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                //DOWNLOAD
                try 
                {
                    s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
                    s3Client.getObject(
                            new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
                            new File(app.getDownloadedBucket())
                            );
                } catch (IOException e) {
                    e.printStackTrace();
                }

                do
                {
                     if(app.getBackUpExist() == true){
                        System.out.println("Converting back up file");
                        app.setCurrentPacsId(objectSummary.getKey());
                        passIn = app.getDataBaseFile();
                        CONVERT= new DataConversion(passIn);
                        System.out.println(CONST.getFileDownloadedMessage());
                    }
                }
                while(app.getObjectExist()==true);

                if(app.getObjectExist()== false)
                {
                    app.setNoObjectFound(true);
                }
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
}

/ ----------------------------拡張メソッド----------------- -------------------- /

//Unzip bucket after download 
public static void unzipBucket() throws IOException {
    unzip = new UnZipBuckets();
    unzip.unZipIt(app.getDownloadedBucket());
    System.out.println(CONST.getFileUnzippedMessage());
}

//list all S3 buckets
public static void listAllBuckets(){
    for (Bucket bucket : app.getListOfBuckets()) {
        String bucketName = bucket.getName();
        System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
    }
}

//Get the contents from the auto back up bucket
public static void listAllBucketContents(){     
    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                app.setBackUpCount(app.getBackUpCount() + 1);   
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
    System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}

}

1
John Hanewich
  1. Windowsユーザーは、このリンクからS3Explorerをダウンロードする必要があります。インストール手順も記載されています。 - http://s3browser.com/download.aspx

  2. 次に、秘密鍵、アクセスキー、地域などのAWS認証情報をs3Explorerに提供します。このリンクには、s3Explorerの設定手順が記載されています。

  3. 今あなたのすべてのs3バケツはs3Explorerの左パネルに見えるでしょう。

  4. 単にバケツを選択して、左上隅のバケツメニューをクリックしてから、メニューからすべてのファイルをダウンロードするオプションを選択してください。以下は同じスクリーンショットです。

バケット選択画面

  1. 次にフォルダを参照して特定の場所にあるバケットをダウンロードします。

  2. [OK]をクリックするとダウンロードが始まります。

1
Patrick R

Neel Bhaatがこの{ blog で説明したように、この目的のために使用できるさまざまなツールがあります。 AWSが提供するものもありますが、そのほとんどはサードパーティ製のツールです。これらすべてのツールでは、AWSアカウントのキーと秘密をツール自体に保存する必要があります。第三者のツールを使用する場合は、慎重に使用してください。保存した認証情報には費用がかかり、その分だけ価値が失われる可能性があります。

そのため、この目的には常に AWS CLI を使用することをお勧めします。あなたは単に this link からこれをインストールすることができます。次に、次のコマンドを実行して、キー、シークレットの値をAWS CLIに保存します。

aws configure

また、次のコマンドを使用してAWS S3 Bucketをローカルコンピューターに同期します。 (ローカルマシンにAWS CLIがインストールされている必要があります)

aws s3 sync <source> <destination>

例:

1)AWS S3からローカルストレージへ

aws s3 sync <S3Uri> <LocalPath>

2)ローカルストレージからAWS S3へ

aws s3 sync <LocalPath> <S3Uri>

3)AWS s3バケットから別のバケットへ

aws s3 sync <S3Uri> <S3Uri> 
1

このコマンドを試してください。

aws s3 sync yourBucketnameDirectory yourLocalDirectory

たとえば、バケット名がmyBucket、ローカルディレクトリがc:\localの場合、次のようになります。

aws s3 sync s3://myBucket c:\local

Awscliの詳細については、 aws cliのインストールを確認してください

0
primit patel

私のコメントは本当に新しい解決策を追加するものではありません。ここで多くの人が言ったように、aws s3 syncは最高です。しかし強力なオプションを誰も指摘していませんでした:dryrun。このオプションはsyncを使用しているときにs3から/ s3にダウンロード/アップロードされるものを見ることを可能にします。あなたがあなたのローカルでもs 3バケットでもコンテンツを上書きしたくないとき、これは本当に役に立ちます。これはどのように使われるかです:

aws s3 sync <source> <destination> --dryrun

望ましくない変更をアップロードしないようにするために、新しいコンテンツをバケットにプッシュする前は常に使用していました。

0
Perimosh

バケットが非常に大きい場合は、並列接続を作成してダウンロード時間を短縮するs4cmdというコマンドがあります。

ようにDebianにインストールするには

apt install s4cmd

ピップがある場合:

pip install s4cmd

~/.s3cfgファイルが存在する場合はそれを読み取り(s3cmdをインストールしてs3cmd --configureを実行しない場合)、コマンドで--access-key=ACCESS_KEY --secret-key=SECRET_KEYを指定できます。

Cliはs3cmdに似ています。あなたの場合、ファイルを再ダウンロードせずにダウンロードをキャンセルして再起動できるので、syncをお勧めします。

s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir

大量のデータ(> 1TB)をダウンロードする場合は、これが請求に影響する可能性があることに注意してください。最初に計算します。これがコストになります

0
bartomeu

@laykeが言ったように、それは安全で安全なS3 cliからファイルをダウンロードすることがベストプラクティスです。しかし、場合によっては、人々はファイルをダウンロードするためにwgetを使用する必要があり、これが解決策です。

aws s3 presign s3://<your_bucket_name/>

これによりpresign_urlを使用してS3からコンテンツをダウンロードするために使用できる一時的な公開URLがあなたの場合はwgetまたは他のダウンロードクライアントを使用して取得できます。

0
Balaji JB

このAWS cliコマンドを使用して、S3バケットのコンテンツ全体をローカルフォルダーにダウンロードできます。

aws s3 sync s3://your-bucket-name "Local Folder Path"

このようなエラーが表示される場合

fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

--no-verify-ssl(ブール値)

デフォルトでは、AWS CLIはAWSサービスと通信するときにSSLを使用します。 SSL接続ごとに、AWS CLIはSSL証明書を検証します。このオプションは、SSL証明書を検証するデフォルトの動作を上書きします。 参照

このタグをコマンドで使用します--no-verify-ssl

aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl
0
Dimuthu

AWS CLIは、S3バケット全体をローカルにダウンロードするための最良の選択肢です。

  1. インストール AWS CLI。

  2. 設定 デフォルトのセキュリティ認証情報とデフォルトのAWSリージョンを使用するためのAWS CLI。

  3. S3バケット全体をダウンロードするには、commandを使用します。

    aws s3 sync s3:// yourbucketname localpath

さまざまなAWSサービスにAWS cliを使用するための参照: https://docs.aws.Amazon.com/cli/latest/reference/

0
singh30