AWS mendukung penghapusan massal hingga 1000 objek per permintaan menggunakan API S3 REST dan berbagai pembungkusnya. Metode ini mengasumsikan Anda tahu kunci objek S3 yang ingin Anda hapus (yaitu, itu tidak dirancang untuk menangani sesuatu seperti kebijakan penyimpanan, file yang melebihi ukuran tertentu, dll).
S3 REST API dapat menentukan hingga 1000 file yang akan dihapus dalam satu permintaan, yang mana harus lebih cepat daripada membuat permintaan individual. Ingat, setiap permintaan adalah permintaan HTTP (dengan demikian TCP). Jadi setiap permintaan memiliki overhead. Anda hanya perlu mengetahui kunci objek dan membuat permintaan HTTP (atau menggunakan pembungkus dalam bahasa pilihan Anda). AWS memberikan informasi hebat tentang fitur ini dan penggunaannya . Pilih saja metode yang paling nyaman bagi Anda!
Saya berasumsi kasus penggunaan Anda melibatkan pengguna akhir yang menentukan sejumlah file tertentu untuk dihapus sekaligus. Daripada memulai tugas seperti "membersihkan semua objek yang merujuk ke file gambar" atau "bersihkan semua file yang lebih tua dari tanggal tertentu" (yang saya percaya mudah untuk dikonfigurasikan secara terpisah dalam S3).
Jika demikian, Anda akan tahu kunci yang perlu Anda hapus. Ini juga berarti pengguna akan lebih suka umpan balik waktu nyata tentang apakah file mereka berhasil dihapus atau tidak. Referensi ke kunci yang tepat seharusnya sangat cepat, karena S3 dirancang untuk mengukur secara efisien meskipun menangani sejumlah besar data.
Jika tidak, Anda dapat melihat panggilan API asinkron. Anda dapat membaca sedikit tentang cara kerjanya secara umum dari posting blog ini atau mencari cara melakukannya dalam bahasa pilihan Anda. Ini akan memungkinkan permintaan penghapusan untuk mengambil utasnya sendiri, dan sisa kode dapat dijalankan tanpa membuat pengguna menunggu. Atau, Anda dapat menurunkan permintaan ke antrian. . . Tetapi kedua opsi ini tidak perlu mempersulit kode Anda (kode asinkron bisa mengganggu) atau lingkungan Anda (Anda memerlukan layanan / daemon / container / server untuk menangani antrian. Jadi saya akan menghindari skenario ini jika memungkinkan.
Sunting: Saya tidak memiliki reputasi untuk mengirim lebih dari 2 tautan. Tetapi Anda dapat melihat komentar Amazon pada tingkat permintaan dan kinerja di sini: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html Dan komentar faq s3 bahwa deleiton massal adalah cara untuk pergi jika mungkin.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
Dan kemudian menghapus objek (ini cukup bahwa melewati 1 proses paralel mencapai batas laju untuk penghapusan objek):tail -n+0 BUCKET.keys | pv -l | grep -v -e "'" | tr '\n' '\0' | xargs -0 -P1 -n1000 bash -c 'aws s3api delete-objects --bucket BUCKET --delete "Objects=[$(printf "{Key=%q}," "$@")],Quiet=true"' _
_
akhirnya :) Saya melewatkannya dan butuh waktu cukup lama untuk memahami mengapa elemen pertama dilewati. Intinya adalah yangbash -c
meneruskan semua argumen sebagai parameter posisi, dimulai dengan$0
, sementara "$ @" hanya memproses parameter yang dimulai dengan$1
. Jadi dummy garis bawah diperlukan untuk mengisi posisi$0
.split -l 1000
membagi file kunci saya menjadi 1000 batch kunci. Sekarang untuk setiap file saya dapat mengeluarkan perintah delete kemudian menghapus file. Jika ada yang salah, saya bisa melanjutkan.aws s3 ls "s3://MY_BUCKET_NAME/SOME_SUB_DIR" | awk '{print $4}'
akan lebih sederhana dan Anda dapat menambahkan| grep
untuk menyaring yang turun dari sana.Saya merasa frustrasi dengan kinerja konsol web untuk tugas ini. Saya menemukan bahwa perintah AWS CLI melakukan ini dengan baik. Sebagai contoh:
aws s3 rm --recursive s3://my-bucket-name/huge-directory-full-of-files
Untuk hierarki file besar, ini mungkin membutuhkan waktu yang cukup lama. Anda dapat mengatur ini berjalan dalam satu
tmux
atauscreen
sesi dan periksa kembali nanti.sumber
aws s3 rm --recursive
perintah menghapus file satu per satu. Meskipun lebih cepat daripada konsol web, ketika menghapus banyak file, bisa jauh lebih cepat jika dihapus secara massalTrik yang rapi adalah menggunakan aturan siklus hidup untuk menangani penghapusan untuk Anda. Anda dapat mengantri aturan untuk menghapus awalan atau objek yang Anda inginkan dan Amazon hanya akan menghapus penghapusan.
https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html
sumber
Tanpa mengetahui bagaimana Anda mengelola bucket s3, ini mungkin bermanfaat atau tidak.
Alat AWS CLI memiliki opsi yang disebut "sinkronisasi" yang dapat sangat efektif untuk memastikan s3 memiliki objek yang benar. Jika Anda, atau pengguna Anda, mengelola S3 dari sistem file lokal, Anda mungkin dapat menghemat banyak pekerjaan menentukan objek mana yang perlu dihapus dengan menggunakan alat CLI.
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
sumber
Sudah disebutkan tentang
s3 sync
perintah sebelumnya, tetapi tanpa contoh dan kata tentang--delete
opsi.Saya menemukan cara tercepat untuk menghapus konten folder dalam
S3
embermy_bucket
dengan:sumber