AWS prend en charge la suppression en masse d'un maximum de 1 000 objets par demande à l'aide de l'API S3 REST et de ses divers wrappers. Cette méthode suppose que vous connaissez les clés d'objet S3 que vous souhaitez supprimer (c'est-à-dire qu'elles ne sont pas conçues pour gérer quelque chose comme une politique de rétention, des fichiers dépassant une certaine taille, etc.).
L'API S3 REST peut spécifier jusqu'à 1 000 fichiers à supprimer en une seule demande, ce qui doit être plus rapide que d'effectuer des demandes individuelles. N'oubliez pas que chaque requête est une requête HTTP (donc TCP). Ainsi, chaque demande entraîne des frais généraux. Il vous suffit de connaître les clés des objets et de créer une requête HTTP (ou d'utiliser un wrapper dans la langue de votre choix). AWS fournit d'excellentes informations sur cette fonctionnalité et son utilisation . Choisissez simplement la méthode qui vous convient le mieux!
Je suppose que votre cas d'utilisation implique que les utilisateurs finaux spécifient un certain nombre de fichiers spécifiques à supprimer en même temps. Plutôt que de lancer une tâche telle que "purger tous les objets qui font référence à des fichiers image" ou "purger tous les fichiers antérieurs à une certaine date" (ce qui, à mon avis, est facile à configurer séparément dans S3).
Si c'est le cas, vous saurez les clés que vous devez supprimer. Cela signifie également que l'utilisateur aimera plus de commentaires en temps réel sur la suppression ou non de son fichier. Les références aux clés exactes sont censées être très rapides, car S3 a été conçu pour évoluer efficacement malgré la gestion d'une très grande quantité de données.
Sinon, vous pouvez examiner les appels d'API asynchrones. Vous pouvez en savoir un peu plus sur leur fonctionnement en général dans cet article de blog ou rechercher comment le faire dans la langue de votre choix. Cela permettrait à la demande de suppression de prendre son propre thread, et le reste du code peut s'exécuter sans faire attendre un utilisateur. Ou, vous pouvez décharger la demande dans une file d'attente. . . Mais ces deux options compliquent inutilement votre code (le code asynchrone peut être ennuyeux) ou votre environnement (vous auriez besoin d'un service / démon / conteneur / serveur pour gérer la file d'attente. J'éviterais donc ce scénario si possible.
Edit: je n'ai pas la réputation de poster plus de 2 liens. Mais vous pouvez voir les commentaires d'Amazon sur le taux de demande et les performances ici: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html Et la FAQ s3 commente que la suppression en bloc est le chemin à parcourir si possible.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
Et puis supprimer des objets (cela suffisait pour que le fait de passer par 1 processus parallèle atteigne les limites de taux de suppression d'objets):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"' _