Wersjonowanie obiektów¶
Versioning pozwala przechowywać wiele wersji tego samego obiektu w jednym buckecie.
Jest to przydatne szczególnie wtedy, gdy chcesz ograniczyć skutki:
- przypadkowego nadpisania pliku,
- przypadkowego usunięcia pliku,
- błędnej aktualizacji danych,
- zmian wykonanych przez aplikację lub użytkownika.
Jak działa versioning?¶
Bez versioningu przesłanie nowego obiektu pod tym samym kluczem zastępuje poprzednią zawartość.
Przykład:
Jeżeli prześlesz nowy plik również jako:
poprzednia zawartość zostanie zastąpiona.
Po włączeniu versioningu S3 może przechowywać wiele wersji tego samego obiektu.
Przykład:
Aktualnie widoczna jest najnowsza wersja, ale wcześniejsze wersje nadal mogą być dostępne.
Włączenie versioningu¶
Aby włączyć versioning dla bucketa:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
--region eu-pl-1 \
s3api put-bucket-versioning \
--bucket firma-backup \
--versioning-configuration Status=Enabled
Sprawdzenie statusu¶
Aby sprawdzić status versioningu:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
--region eu-pl-1 \
s3api get-bucket-versioning \
--bucket firma-backup
Dla bucketa z włączonym versioningiem odpowiedź może wyglądać tak:
Co dzieje się po nadpisaniu obiektu?¶
Załóżmy, że przesłałeś:
a następnie przesłałeś nowy plik pod tym samym kluczem.
Przy włączonym versioningu poprzednia wersja nie musi zostać utracona.
Możesz sprawdzić wszystkie wersje:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api list-object-versions \
--bucket firma-backup
Lista wersji konkretnego obiektu¶
Możesz ograniczyć wynik do określonego klucza:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api list-object-versions \
--bucket firma-backup \
--prefix raport.pdf
Przykładowa odpowiedź może zawierać:
Pobranie konkretnej wersji¶
Jeżeli znasz Version ID, możesz pobrać konkretną wersję obiektu:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api get-object \
--bucket firma-backup \
--key raport.pdf \
--version-id "VERSION_ID" \
raport-stara-wersja.pdf
Zastąp:
rzeczywistym identyfikatorem wersji.
Usunięcie obiektu przy włączonym versioningu¶
Przy włączonym versioningu standardowe usunięcie obiektu:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3 rm s3://firma-backup/raport.pdf
może utworzyć tak zwany Delete Marker.
Oznacza to, że obiekt przestanie być widoczny jako aktualny, ale jego wcześniejsze wersje mogą nadal istnieć.
Delete Marker¶
Delete Marker zachowuje się jak informacja, że aktualna wersja obiektu została usunięta.
Przykład:
Standardowe wyświetlenie zawartości bucketa może nie pokazać raport.pdf, mimo że starsze wersje nadal znajdują się w storage.
Wyświetlenie Delete Markerów¶
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api list-object-versions \
--bucket firma-backup
W odpowiedzi mogą pojawić się sekcje:
Przywrócenie usuniętego obiektu¶
Jeżeli usunięcie utworzyło Delete Marker, wcześniejsze wersje obiektu nadal mogą istnieć.
Jednym ze sposobów przywrócenia obiektu jest usunięcie aktualnego Delete Markera.
Najpierw znajdź jego Version ID:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api list-object-versions \
--bucket firma-backup \
--prefix raport.pdf
Następnie usuń konkretny Delete Marker:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api delete-object \
--bucket firma-backup \
--key raport.pdf \
--version-id "DELETE_MARKER_VERSION_ID"
Po usunięciu Delete Markera poprzednia wersja może ponownie stać się aktualną.
Sprawdź Version ID
Usunięcie konkretnej wersji jest operacją nieodwracalną.
Przed wykonaniem polecenia upewnij się, że wskazujesz właściwy Version ID.
Trwałe usunięcie konkretnej wersji¶
Aby trwale usunąć określoną wersję obiektu:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api delete-object \
--bucket firma-backup \
--key raport.pdf \
--version-id "VERSION_ID"
Trwałe usunięcie
Usunięcie konkretnego Version ID powoduje usunięcie tej wersji obiektu.
Nie jest to to samo co standardowe usunięcie, które może utworzyć Delete Marker.
Zawieszenie versioningu¶
Versioning można zawiesić:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
--region eu-pl-1 \
s3api put-bucket-versioning \
--bucket firma-backup \
--versioning-configuration Status=Suspended
Sprawdzenie:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api get-bucket-versioning \
--bucket firma-backup
Odpowiedź może wyglądać tak:
Suspended nie usuwa wcześniejszych wersji
Zawieszenie versioningu nie powoduje automatycznego usunięcia wersji zapisanych wcześniej.
Starsze wersje nadal zajmują przestrzeń.
Versioning a wykorzystanie przestrzeni¶
Każda wersja obiektu zajmuje miejsce.
Przykład:
Łączne zużycie może wynosić:
mimo że użytkownik widzi tylko jeden aktualny plik o rozmiarze 10 GB.
Versioning wpływa na quota
Starsze wersje obiektów oraz dane pozostające w buckecie mogą być uwzględniane w wykorzystaniu przydzielonej przestrzeni.
Versioning nie jest backupem¶
Versioning zwiększa odporność na przypadkowe zmiany, ale nie należy traktować go jako pełnego zamiennika kopii zapasowej.
Nie chroni przed każdym scenariuszem, szczególnie gdy użytkownik lub aplikacja posiada uprawnienia do trwałego usuwania wersji.
Dla danych krytycznych stosuj niezależną strategię backupu i retencji.
Kiedy warto włączyć versioning?¶
Versioning warto rozważyć dla:
- dokumentów,
- archiwów,
- danych aplikacyjnych,
- konfiguracji,
- ważnych plików użytkowników,
- danych często nadpisywanych.
W przypadku repozytoriów backupowych należy również uwzględnić sposób działania konkretnego oprogramowania backupowego i jego własną politykę retencji.
Najczęściej używane polecenia¶
Włączenie:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api put-bucket-versioning \
--bucket firma-backup \
--versioning-configuration Status=Enabled
Status:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api get-bucket-versioning \
--bucket firma-backup
Lista wersji:
aws \
--profile cloud4you \
--endpoint-url https://s3.cloud4you.pl \
s3api list-object-versions \
--bucket firma-backup
Zawieszenie: