subir pricing glacier aws archivos amazon-web-services amazon-s3 amazon-glacier

amazon web services - pricing - ¿Cómo restaurar carpetas(o cubos enteros) a Amazon S3 desde Glacier?



aws s3 pricing (9)

Aquí está mi versión de la interfaz de aws cli y cómo restaurar los datos del glaciar. Modifiqué algunos de los ejemplos anteriores para que funcionen cuando la clave de los archivos que se restaurarán contiene espacios.

# Parameters BUCKET="my-bucket" # the bucket you want to restore, no s3:// no slashes BPATH="path/in/bucket/" # the objects prefix you wish to restore (mind the `/`) DAYS=1 # For how many days you wish to restore the data. # Restore the objects aws s3 ls s3://{BUCKET}/${BPATH} --recursive | / awk ''{out=""; for(i=4;i<=NF;i++){out=out" "$i}; print out}''| / xargs -I {} aws s3api restore-object --restore-request Days={DAYS} / --bucket {BUCKET} --key "{}"

Cambié el ciclo de vida de muchos de mis depósitos en Amazon S3, por lo que su clase de almacenamiento se estableció en Glacier. Lo hice usando la consola AWS en línea. Ahora necesito esos archivos de nuevo.

Sé cómo restaurarlos a S3 por archivo. Pero mis cubos tienen miles de archivos. Quería ver si había una forma de restaurar todo el cubo a S3, como si hubiera una forma de enviar todo el cubo a Glacier.

Supongo que hay una manera de programar una solución. Pero quería ver si había una forma de hacerlo en la consola. O con otro programa? ¿O algo más que me podría estar perdiendo?


Las respuestas anteriores no funcionaron bien para mí porque mi cubo estaba mezclado con objetos en Glacier y algunos que no lo estaban. Lo más fácil para mí fue crear una lista de todos los objetos GLACIAR en el cubo, luego intentar restaurar cada uno individualmente, ignorando cualquier error (como ya en progreso, no un objeto, etc.).

  1. Obtenga una lista de todos los archivos GLACIER (claves) en el cubo

    aws s3api list-objects-v2 --bucket <bucketName> --query "Contents[?StorageClass==''GLACIER'']" --output text | awk ''{print $2}'' > glacier-restore.txt

  2. Cree un script de shell y ejecútelo reemplazando su "nombre de cubo".

    #!/bin/sh for x in `cat glacier-restore.txt` do echo "Begin restoring $x" aws s3api restore-object --restore-request Days=7 --bucket <bucketName> <bucketName> --key "$x" echo "Done restoring $x" done

El crédito va 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.


No hay una herramienta incorporada para esto. Las "carpetas" en S3 son una ilusión para la conveniencia humana, basada en barras inclinadas hacia adelante en la clave de objeto (ruta / nombre de archivo) y cada objeto que migra al glaciar debe restaurarse individualmente, aunque ...

Por supuesto, podría escribir un script para iterar a través de la jerarquía y enviar esas solicitudes de restauración utilizando los SDK o la API REST en su lenguaje de programación preferido.

Asegúrese de comprender cómo funciona la restauración del glaciar en S3, antes de continuar. Siempre es solo una restauración temporal, y usted elige la cantidad de días que cada objeto persistirá en S3 antes de volver a almacenarse solo en el glaciar.

Además, debe asegurarse de comprender los cargos por sanción por restaurar demasiados datos de glaciares en un período corto de tiempo, o podría incurrir en algún gasto inesperado. Dependiendo de la urgencia, es posible que desee distribuir la operación de restauración durante días o semanas.


Otra forma es rclone. Esta herramienta puede sincronizar / copiar / presionar datos (como podríamos hacer con los archivos). https://rclone.org/faq/#can-rclone-sync-directly-from-drive-to-s3 (el ejemplo del enlace es para Google Drive, pero esto es agnóstico). Pero como dijo Michael - sqlbot, un servidor o un contenedor tiene que iniciar la operación de sincronización / copia de seguridad en alguna parte.


Parece que el navegador S3 puede "restaurar desde Glacier" en el nivel de la carpeta, pero no a nivel de depósito. Lo único es que tienes que comprar la versión Pro. Así que no es la mejor solución.


Recientemente necesité restaurar un cubo entero y todos sus archivos y carpetas. Necesitará las herramientas s3cmd y aws cli configuradas con sus credenciales para ejecutar esto.

Me pareció bastante robusto para manejar errores con objetos específicos en el contenedor que podrían haber tenido una solicitud de restauración.

#!/bin/sh # This will give you a nice list of all objects in the bucket with the bucket name stripped out s3cmd ls -r s3://<your-bucket-name> | awk ''{print $4}'' | sed ''s#s3://<your-bucket-name>/##'' > glacier-restore.txt for x in `cat glacier-restore.txt` do echo "restoring $x" aws s3api restore-object --restore-request Days=7 --bucket <your-bucket-name> --profile <your-aws-credentials-profile> --key "$x" done


Si está utilizando la herramienta CLI de AWS (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

Reemplace <bucket_name> con el nombre del depósito que desee.

Reemplace <days> por el número de días que desea restaurar el objeto.


Una variación de la respuesta de Dustin para usar AWS CLI, pero para usar recursión y pipe to sh para omitir errores (como si algunos objetos ya hubieran solicitado restaurar ...)

BUCKET=my-bucket BPATH=/path/in/bucket DAYS=1 aws s3 ls s3://$BUCKET$BPATH --recursive | awk ''{print $4}'' | xargs -L 1 / echo aws s3api restore-object --restore-request Days=$DAYS / --bucket $BUCKET --key | sh

El bit de eco xargs genera una lista de comandos "aws s3api restore-object" y, al conectarla a sh, puede continuar con el error.

NOTA: Ubuntu 14.04 aws-cli paquete es viejo. Para usar --recursive , necesitarás instalarlo a través de github.

POSTSCRIPT: las restauraciones de glaciares pueden llegar a ser inesperadamente caras rápidamente. Dependiendo de su caso de uso, puede encontrar que el nivel de acceso infrecuente es más apropiado. AWS tiene una buena explicación de los diferentes niveles.


Si usa 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/