Saya telah mencoba menemukan alat baris perintah yang lebih baik untuk menduplikasi ember daripada s3cmd . s3cmd
dapat 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 s3cmd
bisa 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?
amazon-web-services
amazon-s3
Sean McCleary
sumber
sumber
Jawaban:
AWS CLI tampaknya melakukan pekerjaan dengan sempurna, dan memiliki bonus sebagai alat yang didukung secara resmi.
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_requests
untuk mengurangi dampak latensi. Misalnya:sumber
Jika Anda tidak keberatan menggunakan konsol AWS, Anda dapat:
Ini masih cukup lambat, tetapi Anda dapat membiarkannya dan membiarkannya melakukan tugasnya.
sumber
Saya telah mencoba mengkloning dua bucket menggunakan konsol web AWS,
s3cmd
dan 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/
sumber
Untuk solusi adhoc, gunakan
aws cli
sinkronisasi antar bucket:aws s3 sync
kecepatan bergantung pada:- latensi untuk panggilan API ke titik akhir S3
- jumlah panggilan API yang dilakukan secara bersamaan
Untuk meningkatkan kecepatan sinkronisasi:
- jalankan
aws s3 sync
dari 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.
sumber
awscli
dokumen -aws sync
salin hanya file baru dan yang diperbarui. mungkin Anda harus mengharapkan kinerja tinggi denganaws 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)Karena ini tentang hit pertama Google dalam hal ini, menambahkan informasi tambahan.
'Cyno' membuat versi modifikasi s3cmd yang lebih baru, yang sekarang mendukung sinkronisasi bucket-to-bucket secara paralel. Persis apa yang saya tunggu juga.
Permintaan pull ada di https://github.com/pcorliss/s3cmd-modification/pull/2 , versinya di https://github.com/pearltrees/s3cmd-modification
sumber
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.
sumber
a sederhana
aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursive
berfungsi dengan baik (dengan asumsi Anda memiliki pengaturan aws cli)sumber