Comment restaurer des dossiers (ou des seaux entiers) dans Amazon S3 à partir de Glacier?

j'ai changé le cycle de vie d'un tas de mes seaux sur Amazon S3 donc leur classe de rangement a été réglée sur Glacier. J'ai fait ça en utilisant la Console AWS en ligne. J'ai maintenant besoin de ces fichiers.

je sais comment les restaurer sur S3 par fichier. Mais mes seaux ont des milliers de fichiers. Je voulais voir s'il y avait un moyen de restaurer tout le seau à S3, comme il y avait un moyen d'envoyer tout le seau à Glacier?

je suppose qu'il y a un moyen de programmer un solution. Mais je voulais voir si il y avait un moyen de le faire dans la Console. Ou avec un autre programme? Ou quelque chose d'autre que je pourrais manquer?

27
demandé sur TylerW 2013-11-17 21:12:42

9 réponses

il n'y a pas d'outil intégré pour cela. Les "dossiers" en S3 sont une illusion pour le confort de l'homme, basée sur des slashs vers l'avant dans la touche objet (chemin/nom de fichier) et chaque objet qui migre vers glacier doit être restauré individuellement, bien que...

bien sûr, vous pouvez écrire un script pour itérer à travers la hiérarchie et envoyer ces requêtes de restauration en utilisant les SDK ou L'API REST dans le langage de programmation de votre choix.

assurez-vous de comprendre comment restaurer à partir de glacier en s3 works, avant de continuer. Il s'agit toujours d'une restauration temporaire, et vous choisissez le nombre de jours que chaque objet va persister en S3 avant de revenir à être seulement stocké dans le glacier.

en outre, vous voulez être certain que vous comprenez les frais de pénalité pour avoir restauré trop de données sur les glaciers dans un court laps de temps, ou vous pourriez être dedans pour une certaine dépense inattendue. Selon l'urgence, vous pouvez diffuser l'opération de restauration sur des jours ou des semaine.

11
répondu Michael - sqlbot 2013-11-17 19:48:07

Si vous utilisez s3cmd vous pouvez l'utiliser pour restaurer de manière récursive assez facilement:

s3cmd restore --recursive s3://mybucketname/ 

Je l'ai aussi utilisé pour restaurer juste des dossiers aussi bien:

s3cmd restore --recursive s3://mybucketname/folder/
46
répondu Nate Fox 2015-01-16 18:28:13

Si vous utilisez le AWS CLI tool (c'est agréable, vous devriez), vous pouvez le faire comme ceci:

aws s3 ls s3://<bucket_name> | awk '{print }' | xargs -L 1 aws s3api restore-object --restore-request Days=<days> --bucket <bucket_name> --key

Remplacer <bucket_name> avec le nom de seau que vous voulez.

Remplacer <days> avec le nombre de jours que vous souhaitez restaurer l'objet.

25
répondu dustinmm80 2017-04-28 16:32:14

les réponses ci-dessus n'ont pas bien fonctionné pour moi parce que mon seau a été mélangé avec des objets sur le Glacier et certains qui ne l'étaient pas. La chose la plus facile pour moi était de créer une liste de objets GLACIER dans le seau, puis essayer de restaurer chacun individuellement, ignorant toutes les erreurs (comme déjà en cours, pas un objet, etc).

  1. Obtenir une liste de tous les GLACIERS des fichiers (clés) dans le seau

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

  2. Créer un script shell et exécutez-le, en remplaçant votre "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> <bucketName> --key "$x"
        echo "Done restoring $x"
      done
    

le crédit va à Josh à http://capnjosh.com/blog/a-client-error-invalidobjectstate-occurred-when-calling-the-copyobject-operation-operation-is-not-valid-for-the-source-objects-storage-class/, une ressource que j'ai trouvé après avoir essayé certaines des solutions ci-dessus.

7
répondu Domenic D. 2017-10-13 14:19:22

j'ai récemment eu besoin de restaurer tout un seau et tous ses fichiers et dossiers. Vous aurez besoin des outils s3cmd et aws cli configurés avec vos justificatifs d'identité pour exécuter ceci.

j'ai trouvé ceci assez robuste pour gérer les erreurs avec des objets spécifiques dans le seau qui pourraient avoir déjà eu une requête de restauration.

#!/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 }' | 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
4
répondu SR. 2014-05-30 05:21:14

voici ma version du aws cli interface et la façon de restaurer les données à partir de glacier. J'ai modifié certains des exemples ci-dessus pour le travail lorsque la clé de fichiers à restaurer contenir d'espaces.

# 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 "{}"
4
répondu Stanislav 2018-07-16 11:55:13

il semble que le navigateur S3 peut "restaurer à partir de Glacier" au niveau du dossier, mais pas au niveau du seau. La seule chose est que vous devez acheter la version Pro. Donc pas la meilleure solution.

2
répondu TylerW 2013-11-17 20:18:33

une variation sur la réponse de Dustin pour utiliser AWS CLI, mais pour utiliser la récursion et pipe à sh pour sauter les erreurs (comme si certains objets ont déjà demandé une restauration...)

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

le bit xargs echo génère une liste de commandes "aws s3api restore-object" et en passant par sh, vous pouvez continuer sur erreur.

REMARQUE: Ubuntu 14.04 aws-cli paquet est vieux. Afin d'utiliser --recursive vous aurez besoin de installer via github.

POSTSCRIPT: les restaurations de glaciers peuvent devenir très rapidement inopinément chères. selon votre cas d'utilisation, vous trouverez peut-être que le niveau D'accès Peu fréquent est plus approprié. AWS ont une belle explication des différents niveaux.

1
répondu dannyman 2016-05-05 02:17:23

un autre chemin est rclone. Cet outil peut synchroniser / copier / pousser des données ( comme nous pourrions le faire avec des fichiers ). https://rclone.org/faq/#can-rclone-sync-directly-from-drive-to-s3 (l'exemple de lien est pour Google drive, mais c'est agnostique ). Mais comme L'a dit Michael - sqlbot, un serveur ou un conteneur doit démarrer l'opération de synchronisation/sauvegarde quelque part.

0
répondu MouIdri 2017-04-19 14:20:15