AWS hỗ trợ xóa hàng loạt lên tới 1000 đối tượng cho mỗi yêu cầu bằng API S3 REST và các trình bao bọc khác nhau của nó. Phương pháp này giả định rằng bạn biết các khóa đối tượng S3 mà bạn muốn xóa (nghĩa là nó không được thiết kế để xử lý một cái gì đó như chính sách lưu giữ, các tệp có kích thước nhất định, v.v.).
API S3 REST có thể chỉ định tối đa 1000 tệp sẽ bị xóa trong một yêu cầu, điều này phải nhanh hơn so với thực hiện các yêu cầu riêng lẻ. Hãy nhớ rằng, mỗi yêu cầu là một yêu cầu HTTP (do đó TCP). Vì vậy, mỗi yêu cầu mang trên đầu. Bạn chỉ cần biết các khóa của đối tượng và tạo một yêu cầu HTTP (hoặc sử dụng trình bao bọc trong ngôn ngữ bạn chọn). AWS cung cấp thông tin tuyệt vời về tính năng này và cách sử dụng . Chỉ cần chọn phương pháp bạn cảm thấy thoải mái nhất!
Tôi giả sử trường hợp sử dụng của bạn liên quan đến người dùng cuối chỉ định một số tệp cụ thể cần xóa cùng một lúc. Thay vì bắt đầu một tác vụ như "thanh lọc tất cả các đối tượng tham chiếu đến tệp ảnh" hoặc "lọc tất cả các tệp cũ hơn một ngày nhất định" (mà tôi tin là dễ dàng cấu hình riêng trong S3).
Nếu vậy, bạn sẽ biết các phím mà bạn cần xóa. Điều đó cũng có nghĩa là người dùng sẽ thích phản hồi theo thời gian thực hơn về việc liệu tệp của họ có bị xóa thành công hay không. Tham chiếu đến các khóa chính xác được cho là rất nhanh, vì S3 được thiết kế để mở rộng hiệu quả mặc dù xử lý một lượng dữ liệu cực lớn.
Nếu không, bạn có thể xem xét các lệnh gọi API không đồng bộ. Bạn có thể đọc một chút về cách họ làm việc nói chung từ bài đăng trên blog này hoặc tìm kiếm cách thực hiện bằng ngôn ngữ bạn chọn. Điều này sẽ cho phép yêu cầu xóa lấy chủ đề của chính nó và phần còn lại của mã có thể thực thi mà không khiến người dùng phải chờ đợi. Hoặc, bạn có thể giảm yêu cầu đến hàng đợi. . . Nhưng cả hai tùy chọn này đều không làm phức tạp mã của bạn (mã không đồng bộ có thể gây khó chịu) hoặc môi trường của bạn (bạn cần một dịch vụ / daemon / container / máy chủ để xử lý hàng đợi. Vì vậy, tôi nên tránh trường hợp này.
Chỉnh sửa: Tôi không có danh tiếng để đăng nhiều hơn 2 liên kết. Nhưng bạn có thể xem các nhận xét của Amazon về tỷ lệ yêu cầu và hiệu suất tại đây: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html Và các bình luận s3 faq mà deleiton hàng loạt là cách để đi nếu có thể.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
Và sau đó xóa các đối tượng (điều này là đủ để vượt qua 1 quá trình song song đạt đến giới hạn tốc độ để xóa đối tượng):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"' _