A AWS oferece suporte à exclusão em massa de até 1000 objetos por solicitação usando a API REST S3 e seus vários wrappers. Este método pressupõe que você conhece as chaves de objeto do S3 que deseja remover (ou seja, não foi projetado para lidar com algo como uma política de retenção, arquivos com mais de um determinado tamanho etc.).
A API REST S3 pode especificar até 1000 arquivos a serem excluídos em uma única solicitação, o que deve ser mais rápido que fazer solicitações individuais. Lembre-se, cada solicitação é uma solicitação HTTP (portanto, TCP). Portanto, cada solicitação é sobrecarregada. Você só precisa conhecer as chaves dos objetos e criar uma solicitação HTTP (ou usar um wrapper no seu idioma preferido). A AWS fornece ótimas informações sobre esse recurso e seu uso . Basta escolher o método com o qual você se sente mais confortável!
Suponho que o seu caso de uso envolva usuários finais especificando vários arquivos específicos para excluir ao mesmo tempo. Em vez de iniciar uma tarefa como "limpar todos os objetos que se referem a arquivos de imagem" ou "limpar todos os arquivos anteriores a uma determinada data" (que eu acredito que seja fácil de configurar separadamente no S3).
Nesse caso, você saberá as chaves que precisa excluir. Isso também significa que o usuário receberá mais feedback em tempo real sobre se o arquivo foi excluído ou não com sucesso. As referências às chaves exatas devem ser muito rápidas, pois o S3 foi projetado para ser dimensionado com eficiência, apesar de lidar com uma quantidade extremamente grande de dados.
Caso contrário, você pode procurar chamadas de API assíncronas. Você pode ler um pouco sobre como eles funcionariam em geral nesta postagem do blog ou procurar como fazê-lo no idioma de sua escolha. Isso permitiria que a solicitação de exclusão ocupasse seu próprio encadeamento, e o restante do código pode ser executado sem fazer o usuário esperar. Ou, você pode transferir a solicitação para uma fila. . . Mas essas duas opções complicam desnecessariamente o seu código (o código assíncrono pode ser irritante) ou o seu ambiente (você precisaria de um serviço / daemon / container / servidor para lidar com a fila. Portanto, evitaria esse cenário, se possível.
Editar: não tenho reputação de postar mais de 2 links. Mas você pode ver os comentários da Amazon sobre taxa de solicitação e desempenho aqui: http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html E o FAQ do s3 comenta que o deleiton em massa é o caminho a percorrer, se possível.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
e, em seguida, removendo objetos (bastava que um processo paralelo atingisse os limites de taxa para exclusão 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"' _