Mi piacerebbe poter eliminare in batch migliaia o decine di migliaia di file contemporaneamente su S3. Ogni file dovrebbe essere compreso tra 1 MB e 50 MB. Naturalmente, non voglio che l'utente (o il mio server) sia in attesa mentre i file sono in procinto di essere eliminati. Quindi, le domande:
- In che modo S3 gestisce la cancellazione dei file, specialmente quando si eliminano grandi quantità di file?
- Esiste un modo efficace per farlo e fare in modo che AWS esegua la maggior parte del lavoro? Per efficienza, intendo effettuando il minor numero di richieste a S3 e impiegando il minor tempo possibile utilizzando la minima quantità di risorse sui miei server.
aws s3api list-objects --output text --bucket BUCKET --query 'Contents[].[Key]' | pv -l > BUCKET.keys
E quindi rimuovere gli oggetti (questo era sufficiente che il superamento di 1 processo parallelo raggiungesse i limiti di velocità per l'eliminazione degli oggetti):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"' _