Przywróć wersjonowaną łyżkę S3 do określonego momentu w czasie

16

Powiedzmy, że mam włączoną wersję S3 dla mojego segmentu: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Następnie, powiedzmy, że ktoś (na przykład młodszy pracownik) zepsuł wiadro S3 (przypadkowo usuwa niektóre pliki itp.)

Jak mogę następnie przywrócić cały wersjonowany segment do określonego momentu w czasie? Wierzę, że powinno to być możliwe, biorąc pod uwagę API S3, ale wolałbym nie pisać takiego skryptu z obawy przed utratą czegoś (nie jestem ekspertem AWS).

Czy istnieje dobre rozwiązanie tego problemu? Korzystam z segmentu S3 jako magazynu obrazów dla mojej aplikacji Rails, więc coś opartego na Ruby, które mógłbym wykorzystać jako zadanie rake, byłoby idealne.

elsurudo
źródło

Odpowiedzi:

17

Możesz użyć s3-pit-restore

S3 Przywracanie punktu w czasie to narzędzie, którego można dokładnie użyć do przywrócenia segmentu lub podzbioru segmentu do określonego punktu w czasie, na przykład:

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

Co faktycznie oferuje s3-pit-restore:

  • Przywracanie wszystkich plików ze znacznikiem czasu mniejszym niż podany
  • Przywracanie całego wiadra lub prefiksu wiadra
  • Równoległe pobieranie wielu plików z wielką ogólną prędkością
  • Dostosowanie liczby pracowników równoległych ma znaczenie w celu optymalizacji wykorzystania przepustowości
  • Przywróć z wersji wiadra s3 lub z lodowca, jeśli jest włączony
Angelo
źródło
Wydaje mi się, że to nie działa. Miejsce docelowe tworzy katalog lokalny tylko pomimo opisu narzędzia.
Arthur
Uratowałeś mi dzień. Dziękujemy za poinformowanie nas o tym niesamowitym narzędziu.
cyberrspiritt
2

Jeśli dobrze rozumiem dokumentację , po włączeniu kontroli wersji usuwanie pliku po prostu przywraca poprzednią wersję o jeden numer. To jednak ma nie dać możliwość przywrócenia całego wiadra. To sprawia, że ​​poprzednie wersje S3 nie są odpowiednie dla twoich potrzeb (tj. Odzyskiwania po usunięciu).

Na wszelki wypadek przechowuj kopię zapasową w innym miejscu. Przepełnienie stosu zawiera pytanie / odpowiedź na ten temat s3cmd. Jestem pewien, że mógłbyś gdzieś znaleźć skrypt oparty na Ruby lub poprosić na tej stronie o pomoc, jeśli jej potrzebujesz.

Nathan C.
źródło
Poprawny. Wersjonujesz każdy pojedynczy obiekt w wiadrze, a nie w całym wiadrze.
EEAA
1
Och, rozumiem to wszystko. Dlatego zdaję sobie sprawę, że to nie takie proste. Prawdopodobnie musiałbym przejrzeć wszystkie pliki w segmencie, uzyskać informacje o wersji dla każdego pliku, a następnie wybrać prawidłowy element (jeśli istnieje) na podstawie daty i godziny, do której chcę „przywrócić”. Nie takie proste. Pomyślałem, że Amazon pomyślałby o czymś na tak powszechny przypadek użycia, ale niestety nie ... Zastanawiałem się, czy ktoś już napisał ten żmudny skrypt. Przyjrzę się temu s3cmd, ale lubię też mieć wersjonowane migawki na S3.
elsurudo
ta odpowiedź zawiera nieprawidłowe informacje - proste deletewstawia znacznik usuwania, a przyszłe żądania zwracają 404, a nie poprzednią wersję. Aby PRZYWRÓCIĆ, możesz skopiować starą wersję do nowej lub deletez określoną wersją bieżącego obiektu - przyszłe wersje getotrzymają wersję od drugiej do najnowszej. docs.aws.amazon.com/AmazonS3/latest/dev/... aby być uczciwym, wersja docu wokół wersji wiaderkowej jest zwykle niejasna i brakuje jej ...
bystry
@keen Pamiętaj, że na to pytanie udzielono odpowiedzi prawie trzy lata temu ... bardzo możliwe, że zaktualizowali dokumentację. Ale dobry chwyt.
Nathan C
link, do którego odwołuje się dokument docu, dotyczy odzyskiwania (widok odzyskiwania na wysokim poziomie) i nie zmienił się - i szczerze mówiąc, jest więcej niż trochę mylący, gdy zaczyna mówić o usuwaniu. chciałem tylko upewnić się, że nikt tego nie widział i nie pomyślał „po prostu usunięcie obiektu z wiadra s3 w wersji oznacza, że ​​stara wersja zacznie być zwracana” - to MOŻE się zdarzyć, ale trzeba konkretnie usunąć bieżącą wersję (... / klucz ? versionId = xyz), aby tak się stało ...
zapalony
1

Oto przydatny mały skrypt php, którego użyłem do przywrócenia mojego wiadra z zapasowego wiadra z wersjonowaniem:

Aby wrócić do wiadra z włączoną wersjonowaniem

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

przywróć kopię zapasową z plików, które były wersjonowane między tymi dwoma znacznikami czasu

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

możesz pobrać skrypt PHP tutaj: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-verstered-bucket

użytkownik278847
źródło