Solución:
Si utiliza s3cmd
puede usarlo para restaurar de forma recursiva con bastante facilidad:
s3cmd restore --recursive s3://mybucketname/
También lo he usado para restaurar solo carpetas:
s3cmd restore --recursive s3://mybucketname/folder/
Si está utilizando la herramienta AWS CLI (es bueno, debería hacerlo), puede hacerlo así:
aws s3 ls s3://<bucket_name> | awk '{print $4}' | xargs -L 1 aws s3api restore-object --restore-request Days=<days> --bucket <bucket_name> --key
Reemplazar <bucket_name>
con el nombre del depósito que desee.
Reemplazar <days>
con la cantidad de días durante los que desea restaurar el objeto.
Las respuestas anteriores no funcionaron bien para mí porque mi cubo estaba mezclado con objetos en Glacier y algunos que no. Lo más fácil para mí fue crear una lista de todos GLACIER objetos en el cubo, luego intente restaurar cada uno individualmente, ignorando cualquier error (como ya en progreso, no un objeto, etc.).
-
Obtenga una lista de todos los archivos GLACIER (claves) en el depósito
aws s3api list-objects-v2 --bucket <bucketName> --query "Contents[?StorageClass=='GLACIER']" --output text | awk '{print $2}' > glacier-restore.txt
-
Cree un script de shell y ejecútelo, reemplazando su “bucketName”.
#!/bin/sh for x in `cat glacier-restore.txt` do echo "Begin restoring $x" aws s3api restore-object --restore-request Days=7 --bucket <bucketName> --key "$x" echo "Done restoring $x" done
El crédito es para Josh en http://capnjosh.com/blog/a-client-error-invalidobjectstate-occurred-when-calling-the-copyobject-operation-operation-is-not-valid-for-the-source-objects -storage-class /, un recurso que encontré después de probar algunas de las soluciones anteriores.