Restaurer un compartiment S3 versionné à un moment donné

16

Supposons que le versioning S3 soit activé pour mon compartiment: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Ensuite, supposons que quelqu'un (par exemple, un employé débutant) gâche le compartiment S3 (supprime certains fichiers accidentellement, etc.)

Comment puis-je restaurer l'intégralité du compartiment versionné à un moment donné? Je crois que cela devrait être possible compte tenu de l'API de S3, mais je préfère ne pas avoir à écrire un tel script moi-même, de peur de manquer quelque chose (je ne suis pas un expert AWS).

Existe-t-il une bonne solution à ce problème? J'utilise le seau S3 comme magasin d'images pour mon application Rails, donc quelque chose basé sur Ruby que je pourrais utiliser comme tâche de râteau serait idéal.

elsurudo
la source

Réponses:

17

Vous pouvez utiliser s3-pit-restore

S3 Point in Time Restore est un outil que vous pouvez utiliser exactement pour restaurer un compartiment ou un sous-ensemble d'un compartiment à un moment donné, comme ceci:

s3-pit-restore --bucket my-bucket --dest my-restored-bucket --timestamp "06-17-2016 23:59:50 +2"

Ce que s3-pit-restore offre réellement:

  • Restauration de tous les fichiers avec un horodatage inférieur à celui donné
  • Restauration d'un bucket entier ou d'un préfixe de bucket
  • Téléchargement parallèle de plusieurs fichiers avec une grande vitesse globale
  • Personnalisation du nombre de travailleurs parallèles pour optimiser l'utilisation de la bande passante
  • Restaurer à partir de versions de seau s3 ou de glacier si activé
Angelo
la source
Cela ne semble pas fonctionner pour moi. La destination crée uniquement un répertoire local malgré la description de l'outil.
Arthur
Tu m'as sauvé la journée. Merci de nous avoir fait connaître l'outil incroyable.
cyberrspiritt
2

Si je comprends bien la documentation , lorsque la version est activée, la suppression du fichier rétablit simplement la «dernière» version en arrière d'un numéro de version. Cependant, cela ne donne pas la possibilité de restaurer un compartiment entier. Les versions précédentes de S3 ne conviennent donc pas à vos besoins (c'est-à-dire la récupération après suppression).

Gardez également une sauvegarde ailleurs au cas où. Stack Overflow a une question / réponse à ce sujet en utilisant s3cmd. Je suis sûr que vous pourriez trouver un script basé sur Ruby quelque part ou demander de l'aide sur ce site si vous en avez besoin.

Nathan C
la source
Correct. Vous versionnez chaque objet individuel dans le compartiment, pas le compartiment dans son ensemble.
EEAA
1
Oh, je comprends tout ça. C'est pourquoi je me rends compte que ce n'est pas si simple. Je devrais probablement parcourir tous les fichiers dans le compartiment, obtenir les informations de version pour chaque fichier, puis choisir l'élément correct (s'il existe) en fonction de la date à laquelle je veux "revenir". Pas si simple. J'ai pensé qu'Amazon aurait pensé à quelque chose pour un cas d'utilisation aussi commun, mais hélas, non ... Je me demandais donc si quelqu'un avait déjà écrit ce script fastidieux. J'examinerai s3cmd, mais j'aime aussi avoir des instantanés versionnés sur S3.
elsurudo
cette réponse contient des informations incorrectes - un simple deleteinsère un marqueur de suppression et les demandes futures renvoient un 404, pas la version précédente. Pour RESTAURER, vous pouvez copier une ancienne version vers une nouvelle version ou vous pouvez deleteavec une version spécifique de l'objet actuel - puis les futurs getreçoivent la deuxième à la dernière version. docs.aws.amazon.com/AmazonS3/latest/dev/… pour être juste, le docu autour du versionnage du bucket a tendance à être vague et manquant ...
vif
@keen Notez que cette question a été répondue il y a presque trois ans ... il est très possible qu'ils aient mis à jour la documentation. Bonne prise, cependant.
Nathan C du
le lien référencé pour docu concerne la récupération (la vue de récupération de très haut niveau) et n'a pas changé - et pour être honnête, c'est plus qu'un peu déroutant quand il commence à parler de suppressions. Je voulais juste m'assurer que personne ne voyait cela et pensait "simplement supprimer un objet d'un compartiment s3 versionné signifie que l'ancienne version commencera à être renvoyée" - cela PEUT arriver, mais vous devez supprimer spécifiquement la version actuelle (... / clé ? versionId = xyz) pour que cela se produise ...
vif
1

Voici un petit script php pratique que j'ai utilisé pour restaurer mon compartiment à partir d'un compartiment de sauvegarde avec versioning:

Pour remonter dans un compartiment avec le contrôle de version activé

#CONFIGURATION
export bucket_to_backup='example-of-a-bucket-name';
export backup_bucket='example-of-a-backup-bucket-name'; 
export AWS_ACCESS_KEY_ID=ASDFDSAFADSFDASF;
export AWS_SECRET_ACCESS_KEY=adsfdsaf86adsf5adsf568aadf75ads;
#you will need to download and install the s3cmd tool at the following url:
#http://s3tools.org/
s3cmd --access_key=$AWS_ACCESS_KEY_ID --secret_key=$AWS_SECRET_ACCESS_KEY --recursive sync s3://$bucket_to_backup s3://$backup_bucket;

restaurer la sauvegarde à partir de fichiers qui ont été versionnés entre ces deux horodatages

export startSnapShotTimeStamp=1427577934;
export endSnapShotTimeStamp=1427577939;
#do the restore with php script
php awsUtil.php sync example-of-a-backup-bucket-name example-of-a-bucket-name $startSnapShotTimeStamp-$endSnapShotTimeStamp

vous pouvez télécharger le script PHP ici: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

user278847
la source