AWS admite la eliminación masiva de hasta 1000 objetos por solicitud utilizando la API REST de S3 y sus diversos contenedores. Este método supone que conoce las claves de objeto S3 que desea eliminar (es decir, no está diseñado para manejar algo como una política de retención, archivos que tienen un tamaño determinado, etc.).
La API REST de S3 puede especificar que se eliminen hasta 1000 archivos en una sola solicitud, lo que debe ser más rápido que realizar solicitudes individuales. Recuerde, cada solicitud es una solicitud HTTP (por lo tanto, TCP). Entonces cada solicitud lleva gastos generales. Solo necesita conocer las claves de los objetos y crear una solicitud HTTP (o usar un contenedor en el idioma que elija). AWS proporciona gran información sobre esta función y su uso . ¡Simplemente elija el método con el que se sienta más cómodo!
Supongo que su caso de uso implica que los usuarios finales especifiquen una cantidad de archivos específicos para eliminar de una vez. En lugar de iniciar una tarea como "purgar todos los objetos que se refieren a archivos de imágenes" o "purgar todos los archivos anteriores a una fecha determinada" (que creo que es fácil de configurar por separado en S3).
Si es así, conocerá las claves que necesita eliminar. También significa que al usuario le gustará recibir más comentarios en tiempo real sobre si su archivo se eliminó con éxito o no. Se supone que las referencias a claves exactas son muy rápidas, ya que S3 fue diseñado para escalar eficientemente a pesar de manejar una cantidad extremadamente grande de datos.
Si no, puede buscar llamadas API asíncronas. Puedes leer un poco sobre cómo funcionarían en general en esta publicación de blog o buscar cómo hacerlo en el idioma que elijas. Esto permitiría que la solicitud de eliminación tome su propio hilo, y el resto del código puede ejecutarse sin hacer que un usuario espere. O bien, puede descargar la solicitud a una cola. . . Pero ambas opciones complican innecesariamente su código (el código asincrónico puede ser molesto) o su entorno (necesitaría un servicio / demonio / contenedor / servidor para manejar la cola. Así que evitaría este escenario si es posible).
Editar: no tengo la reputación de publicar más de 2 enlaces. Pero puede ver los comentarios de Amazon sobre la tasa de solicitud y el rendimiento aquí: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html Y el faq s3 comenta que la eliminación masiva es la camino a seguir si es posible.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
y luego eliminar objetos (esto fue suficiente para que al pasar 1 proceso paralelo alcance los límites de velocidad para la eliminación de objetos):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"' _