Memperbarui
Seperti yang ditunjukkan oleh alberge (+1), saat ini Antarmuka Baris Perintah AWS yang luar biasa menyediakan pendekatan paling serbaguna untuk berinteraksi dengan (hampir) semua hal AWS - sementara itu mencakup sebagian besar API layanan dan juga menampilkan perintah S3 tingkat yang lebih tinggi untuk menangani Anda kasus penggunaan khusus, lihat referensi AWS CLI untuk S3 :
- sync - Menyinkronkan direktori dan prefiks S3. Kasus penggunaan Anda dicakup oleh Contoh 2 (penggunaan yang lebih halus dengan
--exclude
, --include
dan penanganan awalan dll. Juga tersedia):
Perintah sinkronisasi berikut menyinkronkan objek dengan awalan dan keranjang yang ditentukan ke objek di bawah awalan dan keranjang yang ditentukan lain dengan menyalin objek s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Untuk kelengkapan, saya akan menyebutkan bahwa perintah S3 tingkat yang lebih rendah juga masih tersedia melalui sub perintah s3api , yang akan memungkinkan untuk langsung menerjemahkan solusi berbasis SDK apa pun ke AWS CLI sebelum akhirnya mengadopsi fungsionalitas tingkat yang lebih tinggi.
Jawaban Awal
Memindahkan file di antara bucket S3 dapat dilakukan dengan Objek PUT - Salin API (diikuti dengan DELETE Object ):
Implementasi operasi PUT ini membuat salinan objek yang sudah disimpan di Amazon S3. Operasi penyalinan PUT sama seperti melakukan GET lalu PUT. Menambahkan header permintaan, x-amz-copy-source, membuat operasi PUT menyalin objek sumber ke keranjang tujuan. Sumber
Terdapat sampel masing-masing untuk semua AWS SDK yang ada, lihat Menyalin Objek dalam Operasi Tunggal . Secara alami, solusi berbasis skrip akan menjadi pilihan pertama yang jelas di sini, jadi Menyalin Objek Menggunakan AWS SDK untuk Ruby mungkin merupakan titik awal yang baik; jika Anda lebih memilih Python, hal yang sama juga dapat dicapai melalui boto , tentu saja, lihat metode copy_key()
dalam dokumentasi API S3 boto .
PUT Object
hanya menyalin file, jadi Anda harus secara eksplisit menghapus file melalui DELETE Object
still setelah operasi penyalinan berhasil, tetapi itu hanya akan menjadi beberapa baris setelah keseluruhan skrip yang menangani nama bucket dan file ada di tempatnya (ada contoh masing-masing juga , lihat misalnya Menghapus Satu Objek Per Permintaan ).
AWS CLI resmi baru secara native mendukung sebagian besar fungsi
s3cmd
. Saya sebelumnya telah menggunakans3cmd
atau ruby AWS SDK untuk melakukan hal-hal seperti ini, tetapi CLI resmi berfungsi sangat baik untuk ini.http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
sumber
aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1
nohup aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1 &
thegeekstuff.com/2010/12/5-ways-to-execute-linux-commandUntuk memindahkan / menyalin dari satu ember ke ember lain atau ember yang sama saya menggunakan alat s3cmd dan berfungsi dengan baik. Contohnya:
sumber
Saya menghabiskan waktu berhari-hari menulis alat kustom saya sendiri untuk memparalelkan salinan yang diperlukan untuk ini, tetapi kemudian saya menemukan dokumentasi tentang cara mendapatkan perintah sinkronisasi AWS S3 CLI untuk menyinkronkan bucket dengan paralelisasi besar-besaran . 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 menunggu 100.000 pekerjaan:
Setelah menjalankan ini, Anda dapat menggunakan perintah sinkronisasi sederhana sebagai berikut:
Pada mesin m4.xlarge (dalam AWS - 4 core, 16GB RAM), untuk kasus saya (file 3-50GB) kecepatan sinkronisasi / salin berubah dari sekitar 9,5MiB / s menjadi 700 + MiB / s, peningkatan kecepatan sebesar 70x melebihi konfigurasi default.
Pembaruan: Perhatikan bahwa S3CMD telah diperbarui selama bertahun-tahun dan perubahan ini sekarang hanya efektif saat Anda bekerja dengan banyak file kecil. Perhatikan juga bahwa S3CMD di Windows (hanya di Windows) sangat terbatas dalam keseluruhan throughput dan hanya dapat mencapai sekitar 3Gbps per proses, apa pun ukuran instans atau pengaturan yang Anda gunakan. Sistem lain seperti S5CMD memiliki masalah yang sama. Saya telah berbicara dengan tim S3 tentang ini dan mereka sedang memeriksanya.
sumber
Contoh .NET seperti yang diminta:
using (client) { var existingObject = client.ListObjects(requestForExisingFile).S3Objects; if (existingObject.Count == 1) { var requestCopyObject = new CopyObjectRequest() { SourceBucket = BucketNameProd, SourceKey = objectToMerge.Key, DestinationBucket = BucketNameDev, DestinationKey = newKey }; client.CopyObject(requestCopyObject); } }
dengan klien menjadi sesuatu seperti
var config = new AmazonS3Config { CommunicationProtocol = Protocol.HTTP, ServiceURL = "s3-eu-west-1.amazonaws.com" }; var client = AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretAccessKey, config);
Mungkin ada cara yang lebih baik, tetapi itu hanya beberapa kode cepat yang saya tulis untuk mentransfer beberapa file.
sumber
Jika Anda memiliki host unix dalam AWS, gunakan s3cmd dari s3tools.org. Siapkan izin agar kunci Anda sebagai akses baca ke keranjang pengembangan Anda. Lalu lari:
sumber
s3cmd cp
ini tidak menerima--skip-existing
opsi, namun Anda dapat menjalankannyas3cmd sync
dengan melewatkan yang adaBagi saya perintah berikut baru saja berfungsi:
sumber
Berikut adalah kelas ruby untuk melakukan ini: https://gist.github.com/4080793
Contoh penggunaan:
sumber
Sebenarnya baru-baru ini saya hanya menggunakan tindakan salin + tempel di antarmuka AWS s3. Cukup buka file yang ingin Anda salin, klik "Tindakan" -> "Salin" lalu buka keranjang tujuan dan "Tindakan" -> "Tempel"
Ini mentransfer file dengan cukup cepat dan sepertinya solusi yang tidak terlalu berbelit-belit yang tidak memerlukan pemrograman apa pun, atau solusi yang berlebihan seperti itu.
sumber
Kami memiliki masalah yang sama persis dengan pekerjaan ETL kami di Snowplow , jadi kami mengekstrak kode salinan file paralel kami (Ruby, dibangun di atas Fog ), ke dalam permata Ruby miliknya, yang disebut Sluice:
https://github.com/snowplow/sluice
Sluice juga menangani penghapusan, pemindahan, dan unduhan file S3; semua diparalelkan dan dengan percobaan ulang otomatis jika suatu operasi gagal (yang sering terjadi). Semoga bermanfaat!
sumber
Saya tahu ini adalah utas lama tetapi bagi orang lain yang sampai di sana, saran saya adalah membuat pekerjaan terjadwal untuk menyalin konten dari ember produksi ke pengembangan.
Anda dapat menggunakan Jika Anda menggunakan .NET, artikel ini mungkin membantu Anda
https://edunyte.com/2015/03/aws-s3-copy-object-from-one-bucket-or/
sumber
Untuk versi baru aws2.
sumber