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


705

AWSマネジメントコンソールからS3バケット全体をダウンロードするオプションがないようです。

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


4
ここで多くの人が言ったようにaws s3 sync、最高です。しかし、誰も強力なオプションを指摘しませんdryrunでした:。このオプションを使用すると、を使用してsyncいるときにs3から何がダウンロード/アップロードされるかを確認できます。これは、ローカルまたはs3バケットのコンテンツを上書きしたくない場合に非常に役立ちます。これは使用方法です:aws s3 sync <source> <destination> --dryrun不要な変更をアップロードしないように、新しいコンテンツをバケットにプッシュする前にずっと使用していました。
Perimosh、

回答:


1335

AWS CLI

詳細については、「AWS CLIコマンドリファレンス」を参照してください。

AWSは最近、コマンドラインツールをリリースしました。これはbotoとよく似ており、次を使用してインストールできます。

sudo easy_install awscli

または

sudo pip install awscli

インストールしたら、次のコマンドを実行するだけです。

aws s3 sync s3://<source_bucket> <local_destination>

例えば:

aws s3 sync s3://mybucket .

すべてのオブジェクトをダウンロードします mybucket現在のディレクトリに。

そして出力します:

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

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

S3バケットからS3バケットへの同期、またはローカルからS3バケットへの同期を行うこともできます。

ドキュメントとその他の例を確認してください

上記の例はバケット全体をダウンロードする方法ですが、次のコマンドを実行してフォルダを再帰的にダウンロードすることもできます

aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive

これによりPATH/TO/FOLDERBUCKETNAMEバケット内のディレクトリ内のすべてのファイルとフォルダキーを再帰的にダウンロードするようにCLIに指示されます。


223
最初に実行aws configureし、あなたを追加access keyしてsecret access key見つけることができるここに
Erwin Rooijakkers 2014年

12
Windowsインストーラーaws.amazon.com/cliについては、こちらをご覧ください。環境変数「AWS_ACCESS_KEY_ID」からアクセスキーIDを、「AWS_SECRET_ACCESS_KEY」から秘密キーを取得します。
マットボンド14

7
私が試したs3cmdCyberduck、私にとってawscliはるかに私のバケットから〜70.000ファイルをダウンロードする最速の方法でした。
Arjen 14

11
質問はダウンロードについてのみ尋ねたものですが、このコマンドはディレクトリとS3の間で双方向の同期を実行すると思います。何もアップロードしない場合は、現在のディレクトリが空であることを確認してください。
Jesse Crossen、2014年

15
@JesseCrossenこのaws s3 syncコマンドは何もアップロードしませんが、S3に存在しないファイルはローカルで削除します。ドキュメントを参照してください。
Flimm

168

s3cmdバケットのダウンロードに使用できます。

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

と呼ばれる使用可能な別のツールがありますrclone。これは、Rcloneドキュメントのコードサンプルです。

rclone sync /home/local/directory remote:bucket

5
これはかなり遅いです。特にそれを段階的に使用しようとする場合。帯域幅を飽和させることができるようにマルチスレッド化されたソリューションはありますか?
Peter Lada 2013年

これより下のソリューションは、より良く、より標準的で、より多くのプラットフォームにオープンです
abc123

これは、要求者がバケットを支払う場合は機能しません(arxiv.org/help/bulk_data_s3を参照):-(
Martin Thoma

ダウンロードのためにパターンマッチングを実行する必要がある場合、どうすればソリューションを使用できますか?私の質問:stackoverflow.com/questions/25086722/...
Shrikant Kakani

84

私には、ローカルマシンにAmazon S3のデータをコピーするために、いくつかの異なる方法を使用していたs3cmd、とはるかに最も簡単ですCyber​​duckの

Amazonの認証情報を入力し、シンプルなインターフェースを使用して、バケット、フォルダー、ファイルをダウンロード、アップロード、同期するだけです。

スクリーンショット


よく働く!WindowsおよびMac(GPL)で使用できます。
craastad 2013年

Cyber​​duckを使用すると、公開ファイルを匿名で簡単にダウンロードできます-s3cmdは資格情報を必要とするようです
chrishiestand

Transmitでもうまく動作します。
2015

バケットを保存しようとすると、CLIでエラーが発生しましたが、これは完全に機能しました。
Lazar Kukolj 2016

ああ、予想外に来た。私は以前FTPにcyberduckを使用しましたが、S3接続ができるとは思っていませんでした。素晴らしいヒントをありがとう!
jskierbi 2017年

51

これには多くのオプションがありますが、最善の方法はAWS CLIを使用することです。

ここにウォークスルーがあります:

  1. マシンにAWS CLIをダウンロードしてインストールします。

  2. AWS CLIを構成します。

    ここに画像の説明を入力してください

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

  3. 以下を使用してS3バケットを同期します。

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

    上記のコマンドで、次のフィールドを置き換えます。

    • yourbucket >>ダウンロードするS3バケット。
    • /local/path >>すべてのファイルをダウンロードするローカルシステムのパス。

cyberduckはダウンロードを開始する前にファイルを「準備」する必要があるため、cyberduckの代わりにこれを使用しました。時間がかかるように思われ、実際に「準備」が何をするのかについての情報が見つからなかった大量のファイルの場合。CLIはすぐにダウンロードを開始しました
Tashows

s3://バケット名にそのプレフィックスがあることを確認してください!!! ではaws s3 ls、そのs3://プレフィックスは必要ありませんが、cpコマンドが必要です。
cjmling

43

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

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

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

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


1
一部のファイルまたはフォルダを無視するにはどうすればよいですか?
Nabin、

1
:あなたはこのように、いくつかのファイルやフォルダを除外するために--include&--excludeとワイルドカードを使用することができます@Nabin aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
DarkCenobyte

21

Windowsの場合、私が見つけた最も簡単な方法はS3ブラウザーです。優れたソフトウェアであり、非営利目的での使用は無料です。


3
「Download All Files to ...」オプションを試してみたところ(「s3バケット全体をダウンロード」と同等だと思いますが、Proバージョンが必要だと言っていました。)
Jack Ukleja 2013

2
更新:しかし、バケット内のフォルダー全体をダウンロードすることができました。これは私のニーズに十分でした...
Jack Ukleja

はい、無料版はかなり制限されています。すべてを選択してダウンロードできますが、同時転送は2つだけに制限されます
Hayden Thring

Ubuntu 17.1とs3cmdでpython3サポートエラーが発生した後、Windowsシンプルバージョンを探していましたが、これはうまくいきました。
エデンコルビン2017年

21

Visual Studioを使用する場合は、「AWS Toolkit for Visual Studioダウンロードしてください

インストール後、Visual Studio-AWS Explorer-S3-バケットに移動します-ダブルクリックします

ウィンドウでは、すべてのファイルを選択できます。右クリックしてファイルをダウンロードします。


13

@Laykeの答えは良いですが、大量のデータがあり、永遠に待ちたくない場合は、「AWS CLI S3構成」をお読みください。

次のコマンドは、AWS CLIに1,000スレッドを使用してジョブ(それぞれ小さなファイルまたはマルチパートコピーの一部)を実行し、100,000ジョブを先読みするように指示します。

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コアと16GB RAMを備えたシステムで、私のような場合(3-50GBファイル)、同期/コピー速度は約9.5MiB / sから700 + MiB / sになり、デフォルト設定の70倍の速度向上になりました。


1
これが本当の答えです。テストしたところ、ec2から約2.3GB /分で転送されました。同時オプションなしで約1GB /分。命の恩人。
Karsten


12

一部のOS Xユーザーを助けることができるもう1つのオプションは、送信です。

これはFTPプログラムで、S3ファイルに接続することもできます。また、FinderのフォルダとしてFTPまたはS3ストレージをマウントするオプションもありますが、それは限られた時間のみです。


9

S3の開発を少し行いましたが、バケット全体をダウンロードする簡単な方法が見つかりませんでした。

Javaでコーディングしたい場合は、jets3tする場合は libを使用してバケットのリストを作成し、そのリストを反復処理してバケットをダウンロードするのが簡単です。

まず、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を使用できます。

BucketExplorerを見回した後、「バケット全体をダウンロードする」と思い通りの結果が得られる場合があります。


Javaソリューションが必要でない限り、上記のaws cli回答を使用してください。
jeremyjjbrown 14

新しいフォルダを作成するので同じ
Jisson

7

AWS sdk APIは、フォルダー全体とリポジトリをs3にアップロードし、s3のバケット全体をローカルにダウンロードするための最良のオプションのみになります。

フォルダー全体をs3にアップロードする場合

aws s3 sync . s3://BucketName

ローカルでs3バケット全体をダウンロードする場合

aws s3 sync s3://BucketName . 

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


6

https://github.com/minio/mcでこれを行うことができます

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

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


5

S3FoxでFirefoxを使用している場合は、すべてのファイルを選択(Shiftキーを押しながら最初と最後を選択)し、右クリックしてすべてをダウンロードできます...問題のない500以上のファイルで実行しました


これは、「擬似フォルダー」がAWSコンソールで作成された場合でも、バケット内のサブフォルダーでは機能しません。(このコメントの執筆時点)
ウェズリー

動作しないことを確認しました。約12kのトップレベルキー(サブフォルダー)があります)、S3Foxは起動しません。また、すべてのバケットをリストする権限を主張してください!
Peter Lada 2013年


3

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


3

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

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


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

  2. 次に、s3explorerにシークレットキー、アクセスキー、リージョンなどのAWS認証情報を提供します。このリンクには、ブラウザのs3explorer:Copy Paste Linkの構成手順が含まれています:s3browser.com/s3browser-first-run.aspx

  3. これで、すべてのs3バケットがs3explorerの左側のパネルに表示されます。

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

バケット選択画面

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

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


1

aws syncは完璧なソリューションです。双方向ではありません。ソースから宛先への片方向です。また、バケットに多くのアイテムがある場合は、ダウンロードが速くなるように(インターネット経由ではなくイントラネット経由でダウンロードが行われるため)s3エンドポイントを最初に作成することをお勧めします。


1

ここでは、すべてのバケットをダウンロードし、それらをリストし、それらのコンテンツをリストするためのものをいくつか示します。

    //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

s3cmdコマンドで簡単に取得できます。

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

1

Neel Bhaatがこのブログで説明しているように、この目的で使用できるさまざまなツールがあります。AWSが提供するものもあり、ほとんどがサードパーティのツールです。これらすべてのツールでは、AWSアカウントキーとシークレットをツール自体に保存する必要があります。サードパーティのツールを使用するときは、十分な注意を払ってください。保存した資格情報にコストがかかり、価値がなくなって死んでしまう可能性があります。

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

aws configure

次のコマンドを使用して、AWS S3バケットをローカルマシンに同期します。(ローカルマシンには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> 

たとえば、バケットフォルダーを別のバケットフォルダーにポイントできますか?実際、バケットフォルダーを別のバケットフォルダーと同期したいと思います。
lukai 2018

@lukaiはい。これは、例3で示したものです。送信元と宛先のs3バケットURIが必要なだけです
Keet Sugathadasa

1

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

aws s3 sync s3://bucket-name .

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

aws s3 sync . s3://bucket-name

1

AWS CLIは、S3バケット全体をローカルにダウンロードするのに最適なオプションです。

  1. AWS CLI をインストールします。

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

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

    aws s3 sync s3:// yourbucketname localpath

さまざまなAWSサービスでAWS CLIを使用するためのリファレンス:https : //docs.aws.amazon.com/cli/latest/reference/


1

この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

の使用については、s3 syncすでに複数回説明しています。+ --no-verify-sslセキュリティへの影響を説明せずにの使用を提案することは犯罪です。
Martin Prikryl

セキュリティについての情報をありがとう。私はこの問題に直面し、このリファレンスdocs.aws.amazon.com/cli/latest/reference
Dimuthu

1

バケットが非常に大きい場合は、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

@laykeが言ったように、S3 cliからファイルをダウンロードすることは安全で安全です。しかし、いくつかのケースでは、人々はファイルをダウンロードするためにwgetを使用する必要があり、これが解決策です

aws s3 presign s3://<your_bucket_name/>

これによりpresignは一時的なパブリックURLを取得します。これを使用して、presign_urlを使用してS3からコンテンツをダウンロードできます。この場合、wgetまたはその他のダウンロードクライアントを使用します。


0

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

aws s3 sync yourBucketnameDirectory yourLocalDirectory

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

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

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

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