Mengunduh seluruh ember S3?


705

Saya perhatikan bahwa sepertinya tidak ada pilihan untuk mengunduh seluruh S3 bucket dari AWS Management Console.

Apakah ada cara mudah untuk mengambil semuanya di salah satu ember saya? Saya sedang berpikir tentang membuat folder root publik, menggunakan wgetuntuk mengambil semuanya, dan kemudian menjadikannya pribadi lagi tapi saya tidak tahu apakah ada cara yang lebih mudah.


4
Seperti yang dikatakan banyak orang di sini, aws s3 syncadalah yang terbaik. Tapi tak seorang pun menunjukkan pilihan kuat: dryrun. Opsi ini memungkinkan Anda untuk melihat apa yang akan diunduh / diunggah dari / ke s3 saat Anda menggunakan sync. Ini sangat membantu ketika Anda tidak ingin menimpa konten baik di lokal atau di ember s3. Beginilah caranya digunakan: aws s3 sync <source> <destination> --dryrunSaya menggunakannya sepanjang waktu sebelum mendorong konten baru ke ember agar tidak mengunggah perubahan yang tidak diinginkan.
Perimosh

Jawaban:


1335

AWS CLI

Lihat " Referensi Perintah AWS CLI " untuk informasi lebih lanjut.

AWS baru-baru ini merilis Command Line Tools mereka, yang berfungsi seperti boto dan dapat diinstal menggunakan

sudo easy_install awscli

atau

sudo pip install awscli

Setelah diinstal, Anda dapat menjalankan:

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

Sebagai contoh:

aws s3 sync s3://mybucket .

akan mengunduh semua objek mybucketke direktori saat ini.

Dan akan menampilkan:

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

Ini akan mengunduh semua file Anda menggunakan sinkronisasi satu arah. Itu tidak akan menghapus file yang ada di direktori Anda saat ini kecuali Anda tentukan , dan itu tidak akan mengubah atau menghapus file apa pun di S3. --delete

Anda juga dapat melakukan bucket S3 ke bucket S3, atau lokal ke sinkronisasi bucket S3.

Lihat dokumentasi dan contoh lainnya .

Sedangkan contoh di atas adalah cara mengunduh ember penuh, Anda juga dapat mengunduh folder secara rekursif dengan melakukan

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

Ini akan menginstruksikan CLI untuk mengunduh semua file dan kunci folder secara rekursif dalam PATH/TO/FOLDERdirektori di dalam BUCKETNAMEbucket.


223
Pertama jalankan aws configuredan tambahkan Anda access keydan secret access keyyang dapat ditemukan di sini .
Erwin Rooijakkers

12
Buka di sini untuk penginstal windows aws.amazon.com/cli . Ia mengambil id kunci akses dari variabel lingkungan "AWS_ACCESS_KEY_ID" dan kunci rahasia Anda dari "AWS_SECRET_ACCESS_KEY".
Matt Bond

7
Saya sudah mencoba s3cmddan Cyberduck, tetapi bagi saya awsclisejauh ini adalah cara tercepat untuk mengunduh ~ 70.000 file dari ember saya.
Arjen

11
Harap perhatikan bahwa sementara pertanyaan yang diajukan tentang pengunduhan saja, saya yakin perintah ini akan melakukan sinkronisasi 2 arah antara direktori Anda dan S3. Jika Anda tidak mencoba mengunggah apa pun, pastikan direktori saat ini kosong.
Jesse Crossen

15
@JesseCrossen aws s3 syncPerintah itu tidak akan mengunggah apa pun, tetapi itu akan menghapus file secara lokal jika tidak ada pada S3. Lihat dokumentasi .
Flimm

168

Anda dapat menggunakan s3cmduntuk mengunduh ember Anda:

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

Ada alat lain yang bisa Anda gunakan disebut rclone. Ini adalah contoh kode dalam dokumentasi Rclone:

rclone sync /home/local/directory remote:bucket

5
Ini sangat lambat. Terutama jika Anda mencoba menggunakannya secara bertahap. Apakah ada solusi yang multi-threaded sehingga dapat menjenuhkan bandwidth?
Peter Lada

solusi di bawah ini lebih baik, lebih standar dan terbuka untuk lebih banyak platform
abc123

Ini tidak berfungsi untuk pemohon yang membayar ember (lihat arxiv.org/help/bulk_data_s3 ) :-(
Martin Thoma

bagaimana saya bisa menggunakan solusi Anda jika saya harus melakukan pencocokan pola untuk mengunduh? Pertanyaan saya: stackoverflow.com/questions/25086722/…
Shrikant Kakani

84

Saya telah menggunakan beberapa metode berbeda untuk menyalin data Amazon S3 ke mesin lokal, termasuk s3cmd, dan sejauh ini yang paling mudah adalah Cyberduck .

Yang perlu Anda lakukan adalah memasukkan kredensial Amazon Anda dan menggunakan antarmuka sederhana untuk mengunduh, mengunggah, menyinkronkan semua ember, folder, atau file Anda.

Tangkapan layar


Bagus sekali! Tersedia untuk Windows dan Mac (GPL).
craastad

Cyberduck juga memudahkan untuk mengunduh file publik secara anonim - s3cmd tampaknya memerlukan kredensial
chrishiestand

Bekerja sangat baik dengan Transmit juga.
Undistraction

CLI memberi saya kesalahan ketika saya mencoba menyelamatkan ember saya, ini bekerja dengan sempurna!
Lazar Kukolj

Oh itu tak terduga. Saya menggunakan cyberduck sebelumnya untuk FTP, tetapi tidak pernah berharap untuk memiliki konektivitas S3. Terima kasih atas petunjuk yang bagus!
jskierbi

51

Anda memiliki banyak opsi untuk melakukan itu, tetapi yang terbaik adalah menggunakan AWS CLI.

Inilah langkah-langkahnya:

  1. Unduh dan pasang AWS CLI di mesin Anda:

  2. Konfigurasikan AWS CLI:

    masukkan deskripsi gambar di sini

    Pastikan Anda memasukkan akses yang valid dan kunci rahasia , yang Anda terima saat membuat akun.

  3. Sinkronkan bucket S3 menggunakan:

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

    Pada perintah di atas, ganti bidang-bidang berikut:

    • yourbucket >> ember S3 Anda yang ingin Anda unduh.
    • /local/path >> path di sistem lokal Anda di mana Anda ingin mengunduh semua file.

Saya menggunakan ini alih-alih cyberduck, karena cyberduck perlu "menyiapkan" file sebelum mulai mengunduh. Untuk sejumlah besar file yang sepertinya memakan waktu lama dan saya tidak dapat menemukan informasi tentang apa yang sebenarnya "disiapkan". CLI mulai mengunduh secara instan
Tashows

pastikan Anda memiliki s3://awalan itu dalam nama bucket !!! Dengan aws s3 lsAnda tidak perlu s3://awalan itu tetapi Anda perlu untuk cpperintah.
cjmling

43

Untuk mengunduh menggunakan AWS S3 CLI:

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

Untuk mengunduh menggunakan kode, gunakan AWS SDK.

Untuk mengunduh menggunakan GUI, gunakan Cyberduck.


1
Bagaimana cara mengabaikan beberapa file atau folder?
Nabin

1
@Nabin Anda dapat menggunakan --include & --exclude dengan wildcard untuk mengecualikan beberapa file atau folder, seperti ini: aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
DarkCenobyte

21

Untuk Windows, S3 Browser adalah cara termudah yang saya temukan. Ini adalah perangkat lunak yang sangat baik, dan gratis untuk penggunaan non-komersial.


3
Saya baru saja mencoba opsi "Unduh Semua File ke ..." (yang saya anggap setara dengan "unduh seluruh ember s3" dan dikatakan saya perlu versi Pro.
Jack Ukleja

2
Pembaruan: Tetapi saya dapat mengunduh seluruh folder dalam ember yang cukup untuk kebutuhan saya ...
Jack Ukleja

ya versi gratisnya sangat terbatas, Anda dapat memilih semua, dan mengunduh, tetapi terbatas hanya pada 2 transfer simultan
Hayden Thring

Sedang mencari versi windows sederhana setelah mendapatkan beberapa kesalahan dukungan python3 pada Ubuntu 17.1 dan s3cmd, ini bekerja dengan baik.
edencorbin

21

Jika Anda menggunakan Visual Studio, unduh " AWS Toolkit untuk Visual Studio ".

Setelah diinstal, buka Visual Studio - AWS Explorer - S3 - Ember Anda - Klik dua kali

Di jendela Anda akan dapat memilih semua file. Klik kanan dan unduh file.


13

Jawaban oleh @Layke bagus, tetapi jika Anda memiliki banyak data dan tidak ingin menunggu selamanya, Anda harus membaca " Konfigurasi AWS CLI S3 ".

Perintah berikut akan memberi tahu AWS CLI untuk menggunakan 1.000 utas untuk menjalankan pekerjaan (masing-masing file kecil atau satu bagian dari salinan multi-bagian) dan melihat ke depan 100.000 pekerjaan:

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

Setelah menjalankan ini, Anda dapat menggunakan syncperintah sederhana :

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

atau

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

Pada sistem dengan core CPU 4 dan RAM 16GB, untuk kasus seperti milikku (file 3-50GB) kecepatan sinkronisasi / salin meningkat dari sekitar 9,5MiB / dtk menjadi 700 + MiB / dtk, peningkatan kecepatan 70x dari konfigurasi default.


1
inilah jawaban sebenarnya. baru saja mengujinya, dari EC2 ditransfer sekitar 2.3GB / menit. tanpa opsi bersamaan sekitar 1GB / menit. penyelamat.
Karsten


12

Opsi lain yang dapat membantu beberapa pengguna OS X adalah Transmit.

Ini adalah program FTP yang juga memungkinkan Anda terhubung ke file S3 Anda. Dan, ia memiliki opsi untuk me-mount penyimpanan FTP atau S3 sebagai folder di Finder, tetapi hanya untuk waktu yang terbatas.


9

Saya telah melakukan sedikit pengembangan untuk S3 dan saya belum menemukan cara sederhana untuk mengunduh seluruh bucket.

Jika Anda ingin kode di Java, jets3t lib mudah digunakan untuk membuat daftar bucket dan beralih ke daftar itu untuk mengunduhnya.

Pertama, dapatkan set kunci privat publik dari aturan manajemen AWS sehingga Anda dapat membuat objek layanan S3:

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

Lalu, dapatkan larik benda ember Anda:

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

Terakhir, ulangi larik itu untuk mengunduh objek satu per satu dengan:

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

Saya memasukkan kode koneksi ke threadsafe singleton. Sintaks coba / tangkap yang diperlukan telah dihilangkan karena alasan yang jelas.

Jika Anda lebih suka kode dalam Python, Anda bisa menggunakan Boto sebagai gantinya.

Setelah melihat-lihat BucketExplorer, " Mengunduh seluruh bucket " dapat melakukan apa yang Anda inginkan.


Kecuali Anda membutuhkan solusi Java, gunakan aws cli jawaban di atas.
jeremyjjbrown

buat folder baru dan hal yang sama
Jisson

7

AWS sdk API hanya akan opsi terbaik untuk mengunggah seluruh folder dan repo ke s3 dan mengunduh seluruh ember s3 ke lokal.

Untuk mengunggah seluruh folder ke s3

aws s3 sync . s3://BucketName

untuk mengunduh seluruh ember s3 secara lokal

aws s3 sync s3://BucketName . 

Anda juga dapat menetapkan path Seperti BucketName / Path untuk folder tertentu di s3 untuk diunduh


6

Anda dapat melakukan ini dengan https://github.com/minio/mc :

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

mc juga mendukung sesi, unduhan yang dapat dilanjutkan, unggah dan banyak lagi. mcmendukung sistem operasi Linux, OS X dan Windows. Ditulis dalam Golang dan dirilis di bawah Apache Versi 2.0.


5

Jika Anda menggunakan Firefox dengan S3Fox, itu TIDAK memungkinkan Anda memilih semua file (shift-pilih pertama dan terakhir) dan klik kanan dan unduh semua ... Saya sudah melakukannya dengan 500+ file tanpa masalah


Ini tidak berfungsi untuk subfolder di dalam ember, bahkan jika "folder semu" dibuat di konsol AWS. (Pada saat penulisan komentar ini)
Wesley

Dikonfirmasi tidak berfungsi, saya memiliki sekitar 12k tombol tingkat atas = subfolder), S3Fox bahkan tidak memulai. Juga mendesak izin untuk mendaftar semua ember!
Peter Lada


3

Jika Anda hanya memiliki file di sana (tanpa subdirektori), solusi cepat adalah memilih semua file ( clickpada yang pertama, Shift+clickyang terakhir) dan tekan Enteratau right clickdan pilih Open. Untuk sebagian besar file data ini akan mengunduhnya langsung ke komputer Anda.


3

Untuk menambahkan opsi GUI lain, kami menggunakan fungsionalitas WinSCP S3 . Sangat mudah terhubung, hanya membutuhkan kunci akses dan kunci rahasia Anda di UI. Anda kemudian dapat menelusuri dan mengunduh file apa pun yang Anda butuhkan dari keranjang yang dapat diakses, termasuk unduhan berulang folder bersarang.

Karena ini bisa menjadi tantangan untuk menghapus perangkat lunak baru melalui keamanan dan WinSCP cukup lazim, itu bisa sangat bermanfaat untuk hanya menggunakannya daripada mencoba menginstal utilitas yang lebih khusus.


1
  1. Pengguna Windows perlu mengunduh S3EXPLORER dari tautan ini yang juga memiliki petunjuk pemasangan: - http://s3browser.com/download.aspx

  2. Kemudian memberikan Anda kredensial AWS seperti secretkey, accesskey dan region ke s3explorer, tautan ini berisi instruksi konfigurasi untuk s3explorer: Salin Tempel Tautan di browser: s3browser.com/s3browser-first-run.aspx

  3. Sekarang semua ember s3 Anda akan terlihat di panel kiri s3explorer.

  4. Cukup pilih ember, dan klik menu Bucket di sudut kiri atas, lalu pilih Unduh semua file ke opsi dari menu. Di bawah ini adalah tangkapan layar untuk hal yang sama:

Layar Pemilihan Bucket

  1. Kemudian telusuri folder untuk mengunduh ember di tempat tertentu

  2. Klik OK dan unduhan Anda akan dimulai.


1

sinkronisasi aws adalah solusi sempurna. Itu tidak melakukan dua arah .. itu adalah satu arah dari sumber ke tujuan. Juga, jika Anda memiliki banyak item di bucket, sebaiknya buat endpoint s3 terlebih dahulu sehingga unduhan terjadi lebih cepat (karena unduhan tidak terjadi melalui internet tetapi melalui intranet) dan tanpa biaya


1

Berikut adalah beberapa hal untuk mengunduh semua ember, daftar, daftar isinya.

    //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());
}

/ ---------------------------- Metode Perpanjangan ------------------- ------------------ /

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

Anda bisa mendapatkannya dengan perintah s3cmd :

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

1

Seperti yang dijelaskan Neel Bhaat dalam blog ini , ada banyak alat berbeda yang dapat digunakan untuk tujuan ini. Beberapa disediakan AWS, di mana sebagian besar adalah alat pihak ketiga. Semua alat ini mengharuskan Anda untuk menyimpan kunci dan rahasia akun AWS Anda dalam alat itu sendiri. Berhati-hatilah saat menggunakan alat pihak ketiga, karena kredensial yang Anda simpan mungkin dikenakan biaya, seluruh nilai Anda, dan membuat Anda mati.

Oleh karena itu, saya selalu merekomendasikan menggunakan AWS CLI untuk tujuan ini. Anda cukup menginstal ini dari tautan ini . Selanjutnya, jalankan perintah berikut dan simpan kunci Anda, nilai-nilai rahasia di AWS CLI.

aws configure

Dan gunakan perintah berikut untuk menyinkronkan AWS S3 Bucket Anda ke mesin lokal Anda. (Mesin lokal harus menginstal AWS CLI)

aws s3 sync <source> <destination>

Contoh:

1) Untuk AWS S3 ke Penyimpanan Lokal

aws s3 sync <S3Uri> <LocalPath>

2) Dari Penyimpanan Lokal ke AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) Dari ember AWS s3 ke ember lain

aws s3 sync <S3Uri> <S3Uri> 

Misalnya 3, dapatkah saya mengarahkan folder Bucket ke folder bucket lain? Sebenarnya, saya ingin menyinkronkan folder ember ke folder ember lain.
lukai

@ lukai ya. Ini adalah apa yang saya berikan dalam Contoh 3. Anda hanya perlu memiliki ember URI s3 dari sumber dan tujuan
Keet Sugathadasa

1

Jika Anda hanya ingin mengunduh bucket dari AWS, pertama-tama instal AWS CLI di mesin Anda. Di terminal, ubah direktori ke tempat Anda ingin mengunduh file dan jalankan perintah ini.

aws s3 sync s3://bucket-name .

Jika Anda juga ingin menyinkronkan direktori lokal dan s3 (jika Anda menambahkan beberapa file di folder lokal), jalankan perintah ini:

aws s3 sync . s3://bucket-name


1

Anda dapat menggunakan perintah cli AWS ini untuk mengunduh seluruh konten bucket S3 ke folder lokal

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

Jika Anda melihat kesalahan seperti ini

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

--no-verifikasi-ssl (boolean)

Secara default, AWS CLI menggunakan SSL saat berkomunikasi dengan layanan AWS. Untuk setiap koneksi SSL, AWS CLI akan memverifikasi sertifikat SSL. Opsi ini mengesampingkan perilaku default memverifikasi sertifikat SSL. referensi

Gunakan tag ini dengan perintah --no-verifikasi-ssl

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

Penggunaan s3 syncsudah dibahas di atas beberapa kali. + Menyarankan penggunaan --no-verify-ssltanpa menjelaskan konsekuensi keamanannya adalah kejahatan.
Martin Prikryl

Terima kasih atas informasi tentang keamanan. Saya menghadapi masalah ini dan menyelesaikannya menggunakan referensi ini docs.aws.amazon.com/cli/latest/reference
Dimuthu

1

Jika bucket cukup besar ada perintah yang disebut s4cmdyang membuat koneksi paralel dan meningkatkan waktu pengunduhan:

Untuk menginstalnya di Debian suka

apt install s4cmd

Jika Anda memiliki pip:

pip install s4cmd

Ini akan membaca ~/.s3cfgfile jika ada (jika tidak menginstal s3cmddan menjalankan s3cmd --configure) atau Anda dapat menentukan --access-key=ACCESS_KEY --secret-key=SECRET_KEYpada perintah.

Cli mirip dengan s3cmd. Dalam kasus Anda a syncdisarankan karena Anda dapat membatalkan unduhan dan mulai lagi tanpa harus mengunduh ulang file.

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

Hati-hati jika Anda mengunduh banyak data (> 1TB) ini dapat memengaruhi tagihan Anda, hitung dulu yang akan menjadi biayanya


0

Seperti yang dikatakan @layke, ini adalah praktik terbaik untuk mengunduh file dari S3 S3, ini adalah aman dan terlindungi. Tetapi dalam beberapa kasus, orang perlu menggunakan wget untuk mengunduh file dan inilah solusinya

aws s3 presign s3://<your_bucket_name/>

Presign ini akan membuat Anda mendapatkan URL publik sementara yang dapat Anda gunakan untuk mengunduh konten dari S3 menggunakan presign_url, dalam kasus Anda menggunakan wget atau klien unduhan lainnya.


0

Coba perintah ini:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

Misalnya, jika nama ember Anda myBucketdan direktori lokal adalah c:\local, maka:

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

Untuk informasi lebih lanjut tentang awscli, periksa instalasi aws cli ini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.