Stellen Sie einen versionierten S3-Bucket zu einem bestimmten Zeitpunkt wieder her

15

Angenommen, ich habe die S3-Versionierung für meinen Bucket aktiviert: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Nehmen wir an, jemand (zum Beispiel ein Junior-Mitarbeiter) hat den S3-Bucket durcheinander gebracht (einige Dateien werden versehentlich gelöscht usw.)

Wie kann ich dann den gesamten versionierten Bucket zu einem bestimmten Zeitpunkt wiederherstellen? Ich bin der Meinung, dass dies mit der S3-API möglich sein sollte, aber ich würde es vorziehen, kein solches Skript selbst zu schreiben, aus Angst, etwas zu verpassen (ich bin kein AWS-Experte).

Gibt es eine gute Lösung für dieses Problem? Ich verwende den S3-Bucket als Image-Speicher für meine Rails-App, daher wäre etwas Ruby-basiertes, das ich als Rechenaufgabe verwenden könnte, ideal.

elsurudo
quelle

Antworten:

17

Sie können verwenden s3-pit-restore

S3 Point in Time Restore ist ein Tool, mit dem Sie einen Bucket oder eine Teilmenge eines Bucket genau zu einem bestimmten Zeitpunkt wiederherstellen können.

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

Was s3-pit-restore eigentlich bietet:

  • Wiederherstellung aller Dateien mit weniger als dem angegebenen Zeitstempel
  • Wiederherstellung eines ganzen Buckets oder eines Bucket-Präfix
  • Paralleler Download mehrerer Dateien mit einer hohen Gesamtgeschwindigkeit
  • Die Anpassung der Anzahl der parallelen Worker zur Optimierung der Bandbreitennutzung
  • Wiederherstellung von s3-Bucket-Versionen oder vom Gletscher, falls aktiviert
Angelo
quelle
Das scheint bei mir nicht zu funktionieren. Ziel erstellt trotz der Beschreibung des Tools nur ein lokales Verzeichnis.
Arthur
Du hast meinen Tag gerettet. Vielen Dank, dass Sie uns das großartige Tool mitgeteilt haben.
Cyberrspiritt
2

Wenn ich die Dokumentation richtig verstehe und Sie die Versionierung aktiviert haben, wird beim Löschen der Datei einfach die "neueste" Version mit einer Versionsnummer zurückgesetzt. Dies gibt jedoch nicht die Möglichkeit, einen gesamten Bucket wiederherzustellen. Dies macht die vorherigen Versionen in S3 nicht für Ihre Anforderungen geeignet (dh Wiederherstellung nach dem Löschen).

Bewahren Sie ein Backup auch an einem anderen Ort für alle Fälle auf. Stack Overflow hat eine Frage / Antwort zu dieser Verwendung s3cmd. Ich bin sicher, Sie könnten irgendwo ein Ruby-basiertes Skript finden oder auf dieser Site um Hilfe bitten, wenn Sie es benötigen.

Nathan C
quelle
Richtig. Sie versionieren jedes einzelne Objekt im Bucket, nicht den gesamten Bucket.
EEAA
1
Oh, ich verstehe das alles. Deshalb ist mir klar, dass es nicht so einfach ist. Ich müsste wahrscheinlich alle Dateien im Bucket durchsuchen, Versionsinformationen für jede Datei abrufen und dann das richtige Element (falls vorhanden) basierend auf dem Datum auswählen, zu dem ich "zurückkehren" möchte. Nicht so einfach. Ich dachte mir, Amazon hätte etwas für einen so häufigen Anwendungsfall, aber leider nicht ... Also habe ich mich gefragt, ob jemand dieses mühsame Drehbuch bereits geschrieben hat. Ich werde nachsehen s3cmd, aber ich mag es auch, Snapshots auf S3 versioniert zu haben.
Elsurudo
Diese Antwort enthält falsche Informationen. Ein einfaches deleteEinfügen eines Lösch-Markers und zukünftige Anforderungen geben eine 404 zurück, nicht die vorherige Version. Zum WIEDERHERSTELLEN können Sie eine alte Version in eine neue Version oder deleteeine bestimmte Version des aktuellen Objekts kopieren. Zukünftigen getwird dann die vorletzte Version zugewiesen. docs.aws.amazon.com/AmazonS3/latest/dev/… um fair zu sein, ist die Doku über die Bucket-Versionierung eher vage und fehlt ...
scharf
@keen Beachten Sie, dass diese Frage vor fast drei Jahren beantwortet wurde. Möglicherweise wurde die Dokumentation aktualisiert. Guter Fang.
Nathan C
Der Link, auf den für docu verwiesen wird, handelt von der Wiederherstellung (der Super-High-Level-Wiederherstellungsansicht) und hat sich nicht geändert. Um ehrlich zu sein, ist es mehr als verwirrend, wenn es um Löschvorgänge geht. Ich wollte nur sicherstellen, dass niemand dies sieht und dachte, "nur das Löschen eines Objekts aus einem versionierten S3-Bucket bedeutet, dass die alte Version zurückgegeben wird" - das KANN passieren, aber Sie müssen die aktuelle Version (... / key) ausdrücklich löschen ? versionId = xyz), damit das passiert ...
eifriger
2

Hier ist ein praktisches kleines PHP-Skript, mit dem ich meinen Bucket aus einem Backup-Bucket mit Versionierung wiederhergestellt habe:

So rennen Sie mit aktivierter Versionierung zurück in einen Bucket

#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;

Stellen Sie die Sicherung von Dateien wieder her, die zwischen diesen beiden Zeitstempeln versioniert wurden

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

Sie können das PHP-Skript hier herunterladen: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

user278847
quelle