AWS obsługuje usuwanie zbiorcze do 1000 obiektów na żądanie przy użyciu interfejsu API REST S3 i jego różnych opakowań. Ta metoda zakłada, że znasz klucze obiektów S3, które chcesz usunąć (to znaczy, że nie jest zaprojektowana do obsługi czegoś takiego jak polityka przechowywania, pliki o określonym rozmiarze itp.).
Interfejs API REST S3 może określić do 1000 plików do usunięcia w jednym żądaniu, co musi być szybsze niż w przypadku pojedynczych żądań. Pamiętaj, że każde żądanie jest żądaniem HTTP (a więc TCP). Każde żądanie niesie więc koszty ogólne. Musisz tylko znać klucze obiektów i utworzyć żądanie HTTP (lub użyj opakowania w wybranym języku). AWS zapewnia świetne informacje na temat tej funkcji i jej użytkowania . Po prostu wybierz metodę, która najbardziej Ci odpowiada!
Zakładam, że twój przypadek użycia obejmuje użytkowników końcowych, którzy określają liczbę określonych plików do usunięcia na raz. Zamiast inicjować zadanie, takie jak „wyczyść wszystkie obiekty, które odnoszą się do plików obrazów” lub „wyczyść wszystkie pliki starsze niż określona data” (co moim zdaniem jest łatwe do skonfigurowania osobno w S3).
Jeśli tak, poznasz klucze, które musisz usunąć. Oznacza to również, że użytkownik będzie chciał otrzymywać w czasie rzeczywistym więcej informacji na temat tego, czy jego plik został pomyślnie usunięty, czy nie. Odniesienia do dokładnych kluczy powinny być bardzo szybkie, ponieważ S3 został zaprojektowany do wydajnego skalowania pomimo obsługi bardzo dużej ilości danych.
Jeśli nie, możesz przeglądać asynchroniczne wywołania API. Możesz przeczytać trochę o tym, jak ogólnie by działały, z tego postu na blogu lub poszukać, jak to zrobić w wybranym języku. Umożliwiłoby to zajęcie się żądaniem usunięcia własnego wątku, a reszta kodu może zostać wykonana bez oczekiwania użytkownika. Lub możesz odciążyć żądanie do kolejki. . . Ale obie te opcje niepotrzebnie komplikują albo twój kod (kod asynchroniczny może być denerwujący), albo twoje środowisko (potrzebujesz obsługi / demona / kontenera / serwera, aby obsłużyć kolejkę. Więc jeśli to możliwe, uniknę tego scenariusza.
Edycja: Nie mam reputacji, aby publikować więcej niż 2 linki. Ale komentarze Amazon dotyczące szybkości i wydajności żądań można znaleźć tutaj: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html I s3 faq komentuje, że masowe deleiton jest droga, jeśli to możliwe.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
A następnie usuwanie obiektów (to wystarczyło, aby przejście przez 1 równoległy proces osiągnęło limity szybkości usuwania obiektów):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"' _