Duplikasi bucket s3 lebih cepat

93

Saya telah mencoba menemukan alat baris perintah yang lebih baik untuk menduplikasi ember daripada s3cmd . s3cmddapat menggandakan keranjang tanpa harus mengunduh dan mengunggah setiap file. Perintah yang biasanya saya jalankan untuk menggandakan bucket menggunakan s3cmd adalah:

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

Ini berfungsi, tetapi sangat lambat karena menyalin setiap file melalui API satu per satu. Jika s3cmdbisa berjalan dalam mode paralel, saya akan sangat senang.

Apakah ada opsi lain yang tersedia sebagai alat baris perintah atau kode yang digunakan orang untuk menduplikasi keranjang yang lebih cepat dari s3cmd?

Sunting: Sepertinya s3cmd-modif adalah persis seperti yang saya cari. Sayang sekali itu tidak berhasil. Apakah ada pilihan lain?

Sean McCleary
sumber
6
Tidak yakin mengapa pertanyaan ini berulang kali ditutup, karena tampaknya sejumlah pengembang telah mengalaminya. Bagaimanapun, saya menyelesaikannya dengan cara yang sangat paralel, inilah tautannya: github.com/cobbzilla/s3s3mirror terima kasih! - jonathan.
cobbzilla

Jawaban:

166

AWS CLI tampaknya melakukan pekerjaan dengan sempurna, dan memiliki bonus sebagai alat yang didukung secara resmi.

aws s3 sync s3://mybucket s3://backup-mybucket

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

Mendukung transfer bersamaan secara default. Lihat http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests

Untuk mentransfer sejumlah besar file kecil dengan cepat, jalankan skrip dari instans EC2 untuk mengurangi latensi, dan tingkatkan max_concurrent_requestsuntuk mengurangi dampak latensi. Misalnya:

aws configure set default.s3.max_concurrent_requests 200
python1981
sumber
4
Mendukung sinkronisasi non-konkuren berdasarkan waktu modifikasi file, ukuran, dll. Sangat cepat ketika saya mencobanya. Saya yakin objek disalin langsung di S3 tanpa mengunduhnya ke mesin lokal. Itu tidak berjalan secara paralel secara default tetapi saya yakin Anda dapat memiliki beberapa perintah sinkronisasi yang berjalan pada subfolder terpisah pada saat yang bersamaan. Ini cukup cepat sehingga Anda mungkin tidak perlu menjalankannya secara paralel. Saya baru saja menggandakan 100GB data dalam beberapa menit.
python1981
11
Lambat sekali jika jumlah file tinggi.
Phương Nguyễn
14
Saat mentransfer banyak file kecil, latensi menjadi kendala utama sehingga menjalankan perintah ini dari instans EC2 sangat penting.
python1981
1
Saya menggunakan ini untuk membangun buruh pelabuhan dan bekerja dengan cukup baik github.com/sunshineo/s3-bucket-copier
Gordon Sun
3
Sekarang TIDAK mendukung sinkronisasi bersamaan :-) docs.aws.amazon.com/cli/latest/topic/…
python1981
70

Jika Anda tidak keberatan menggunakan konsol AWS, Anda dapat:

  1. Pilih semua file / folder di keranjang pertama
  2. Klik Tindakan> Salin
  3. Buat keranjang baru dan pilih
  4. Klik Tindakan> Tempel

Ini masih cukup lambat, tetapi Anda dapat membiarkannya dan membiarkannya melakukan tugasnya.

orang mati
sumber
Apakah ini menyalin konten keranjang sumber ke komputer saya saat menyalin ke tujuan? Ada banyak aktivitas jaringan dan pemeriksa browser sangat lambat sehingga sulit untuk dianalisis. 600K / s di mesin saya. Ini akan menjadi jauh lebih cepat untuk memulai transfer dalam jaringan amazon ... Sebaiknya coba di sana.
Brad Goss
9
Saya baru saja menggunakan metode ini hari ini. Itu tidak menarik file ke mesin lokal Anda - itu melakukan salinan langsung dan jauh lebih cepat.
Greg Benediktus
7
Itu masih mengambil daftar file. Jika daftarnya terlalu panjang (lusinan ribu file dalam kasus saya) maka itu lambat sekali. Dan waktu tunggu / hang sangat mungkin terjadi
Phương Nguyễn
13
Sayangnya proses ini terikat pada browser. :( Dari dokumen : "Setelah Anda memulai proses penyalinan, Anda harus tetap membuka browser saat penyalinan sedang berlangsung."
David Lemayian
4
Saya mencoba melakukan ini di ember dengan 8 juta file di dalamnya. Tidak tahu berapa bulan yang saya perlukan untuk memilih semua kotak centang ...
Chris Harrison
28

Saya telah mencoba mengkloning dua bucket menggunakan konsol web AWS, s3cmddan AWS CLI. Meskipun metode ini sering kali berhasil, namun lambat sekali.

Kemudian saya menemukan s3s3mirror: alat khusus untuk menyinkronkan dua bucket S3. Ini multi-utas dan jauh lebih cepat daripada pendekatan lain yang telah saya coba. Saya dengan cepat memindahkan Giga-byte data dari satu wilayah AWS ke wilayah lain.

Lihat di https://github.com/cobbzilla/s3s3mirror , atau unduh wadah Docker dari https://registry.hub.docker.com/u/pmoust/s3s3mirror/

Ketil
sumber
1
Jika Anda memiliki banyak file untuk ditransfer, sejauh ini ini adalah alat terbaik untuk pekerjaan itu. Sayang sekali itu sangat jauh dari daftar jawaban ...
John Chrysostom
Catatan untuk beberapa orang: Memerlukan Java 6/7 untuk dikompilasi.
Brian
1
Saya menggunakan ini dari instans EC2 dan bekerja sangat cepat! Saya harus mengganti <source-bucket> dan <destination-bucket> dengan nama bucket sebenarnya (bukan endpoint atau sesuatu seperti di AWS CLI).
ironmouse
1
Alat luar biasa, sangat disarankan dibandingkan yang lain, untuk file dalam jumlah besar. Kontrol atas jumlah utas salinan sangat bagus.
Shaunak
Tidakkah menurut Anda lebih aman menggunakan aws-cli dan bukan aplikasi pihak ketiga untuk melakukan pekerjaan itu? Bagaimanapun kita perlu memberikan kredensial atau kunci akses untuk menggunakan alat ini.
Keet Sugathadasa
10

Untuk solusi adhoc, gunakan aws clisinkronisasi antar bucket:

aws s3 synckecepatan bergantung pada:
- latensi untuk panggilan API ke titik akhir S3
- jumlah panggilan API yang dilakukan secara bersamaan

Untuk meningkatkan kecepatan sinkronisasi:
- jalankan aws s3 syncdari instance AWS (c3.large di FreeBSD OK ;-))
- perbarui ~ / .aws / config dengan:
- max_concurrent_requests = 128
-max_queue_size = 8096

dengan konfigurasi dan jenis instance berikut, saya dapat menyinkronkan keranjang (309 GB, 72K file, us-east-1) dalam 474 detik.

Untuk solusi yang lebih umum, pertimbangkan - AWS DataPipeLine atau replikasi lintas wilayah S3.

Tom Lime
sumber
Apakah Anda tahu apakah saya bisa mengharapkan kinerja yang sama jika saya menggunakan S3 cp? Apakah Anda yakin bahwa ketika Anda menggunakan sinkronisasi, itu benar-benar mentransfer semua 309GB? sync hanya akan menyinkronkan file yang tidak sama atau ada di keranjang lain.
dingin
Juga, apa pendapat Anda tentang ini untuk kasus penggunaan di mana saya memiliki 1k atau kurang file, tetapi ukurannya lebih besar (10gb)? Apakah menurut Anda saya akan melihat kinerja yang serupa dengan Anda?
dingin
@frosty, dalam kasus saya ember tujuan kosong. per awsclidokumen - aws syncsalin hanya file baru dan yang diperbarui. mungkin Anda harus mengharapkan kinerja tinggi dengan aws cp(penyalinan dilakukan secara internal, klien Anda hanya mengeluarkan panggilan API). kinerja bergantung pada faktor-faktor ini: 1. latensi antara wilayah src dan dst (misalnya us-east-X ke us-west-X) 2. latensi antara klien Anda dan titik akhir API AWS (seberapa cepat Anda dapat mengeluarkan panggilan API) 3. jumlah permintaan bersamaan (berapa banyak permintaan per detik yang dapat dikeluarkan klien Anda). Dalam kasus saya, 309G disalin di antara keranjang di wilayah yang sama (us-east-1)
Tom Lime
2

Saya tidak tahu alat baris perintah S3 lainnya, tetapi jika tidak ada yang muncul di sini, mungkin paling mudah untuk menulisnya sendiri.

Pilih bahasa dan Amazon SDK / Toolkit yang Anda sukai. Kemudian Anda hanya perlu membuat daftar / mengambil konten keranjang sumber dan menyalin setiap file (Jelas secara paralel)

Melihat sumber modifikasi s3cmd (dan saya akui saya tidak tahu apa-apa tentang python), sepertinya mereka belum memparalelkan kode ember-ke-ember tetapi mungkin Anda dapat menggunakan kode paralel unggah / unduh standar sebagai titik awal untuk melakukan hal ini.

Geoff Appleford
sumber
Ya. Saya telah bermain-main dengan ide ini dan menulisnya dalam ruby ​​dengan evented machine atau thread dengan JRuby. Namun, s3cmd sudah cukup lengkap dan saya lebih suka menggunakannya. Saya telah berbicara dengan pengembang s3cmd, dan dia memiliki beberapa solusi dalam pipa yang kemungkinan akan mengatasi masalah kinerja.
Sean McCleary
1

a sederhana aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursiveberfungsi dengan baik (dengan asumsi Anda memiliki pengaturan aws cli)

mdmjsh.dll
sumber