Verze objektů se používá k uložení více kopií objektu do stejného bloku. Každá z těchto kopií odpovídá obsahu objektu v konkrétním okamžiku v minulosti. Tuto funkci lze použít k ochraně objektů v bucketu před přepsáním nebo náhodným vymazáním.
Tato funkcionalita, která umožňuje historický záznam objektů v bucketu, vyžaduje, aby byl povolen na úrovni bucketu, čímž vznikají tři různé stavy bucketu: „unversioned“, „versioning enabled“ nebo „versioning suspended“.
Nově vytvořený bucket je vždy ve stavu „unversioned“.
Je-li funkce verzování povolena, může se bucket přepínat mezi stavy „versioning enabled“ nebo „versioning suspended“, ale nemůže se vrátit do stavu „unversioned“. To znamená, že po aktivaci nelze zrušit verzování bucketu, lze jej pouze pozastavit.
Každá verze objektu je identifikována pomocí VersionID. Pokud není bucket verzován, bude VersionID hodnota nula. Ve verzovaném bucketu bude aktualizace objektu prostřednictvím požadavku PUT ukládat nový objekt s jedinečným VersionID.
Přístup k verzi objektu v bucketu lze provést prostřednictvím jména nebo kombinace jména a VersionID. V případě přístupu pouze podle jména bude obnovena nejnovější - aktuální verze verze objektu.
V případě odstranění objektu ve verzovaném bucketu budou pokusy o přístup prostřednictvím požadavků GET vracet chybu, pokud nebude zahrnuto VersionID. Chcete-li obnovit odstraněný objekt, není nutné tento objekt stahovat a nahrávat. Stačí zadat operaci KOPIE včetně konkrétního VersionID. Viz níže.
K testování verzování objektů můžete použít AWS CLI, nástroj s otevřeným zdrojovým kódem, který poskytuje příkazy pro interakci se službami AWS z terminálového programu. Konkrétně použijte příkazy rozhraní API AWS CLI obsažené v sadě příkazů s3api.
Pokud se pro neverzovaný bucket nahraje objekt se stejným klíčem, přepíše jej. Pokud je pro verzovaný bucket nahrán objekt se stejným klíčem, nový nahraný objekt se stane aktuální verzí a předchozí objekt se stane neaktuální verzí:
$ aws s3api create-bucket --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz
$ aws s3api get-bucket-versioning --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz
$ aws s3api put-bucket-versioning --bucket "název bucketu" --versioning-configuration Status=Enabled --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz
$ aws s3api get-bucket-versioning --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Status": "Enabled", "MFADelete": "Disabled" }
Přidávání objektů
Přidávání objektů
$ aws s3api put-object --key "název souboru" --body "cesta k souboru 1" --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "VersionId": "KdS5Yl0d06bBSYriIddtVb0h5gofiNX" }
$ aws s3api put-object --key "název souboru" --body "cesta k souboru 2" --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa" }
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": true, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } }, { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "KdS5Yl0d06bBSYriIddtVb0h5gofiNX", "IsLatest": false, "LastModified": "2020-05-18T10:33:53.066Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } } ] }
Vyhledávání objektů
Vyhledávání objektů
U bucketu bez verzování se vyhledáváním objektů vrací vždy jediný dostupný objekt. U bucketu s verzováním se vrátí vyhledáváním aktuální objekt:
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": true, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } }, { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "KdS5Yl0d06bBSYriIddtVb0h5gofiNX", "IsLatest": false, "LastModified": "2020-05-18T10:33:53.066Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } } ] }
$ aws s3api get-object --key "název souboru" "název souboru.out" --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "AcceptRanges": "bytes", "LastModified": "Mon, 18 May 2020 10:34:05 GMT", "ContentLength": 13, "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "ContentType": "binary/octet-stream", "Metadata": {} }
U verzovaného bucketu lze neaktivní objekty načíst zadáním ID Version:
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": true, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } }, { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "KdS5Yl0d06bBSYriIddtVb0h5gofiNX", "IsLatest": false, "LastModified": "2020-05-18T10:33:53.066Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } } ] }
$ aws s3api list-object-versions --bucket "název bucketu" --version-id KdS5Yl0d06bBSYriIddtVb0h5gofiNX --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "AcceptRanges": "bytes", "LastModified": "Mon, 18 May 2020 10:33:53 GMT", "ContentLength": 13, "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "VersionId": "KdS5Yl0d06bBSYriIddtVb0h5gofiNX", "ContentType": "binary/octet-stream", "Metadata": {} }
Odstraňování objektů
Odstraňování objektů
U bucketu bez verzování je objekt trvale odstraněn a nelze jej obnovit. U bucketu s verzováním zůstanou všechny verze v kbelíku a RGW vloží značku o odstranění, která se stane aktuální verzí:
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": true, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } },
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": false, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } } ], "DeleteMarkers": [ { "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" }, "Key": "test-key-1", "VersionId": "hxV8on0vry4Oz0FNcgsz88aDcQoZO.y", "IsLatest": true, "LastModified": "2020-05-18T11:21:57.544Z" } ] }
Pokud je v případě verzovaného bucketu odstraněn objekt s konkrétním VersionID, dojde k trvalému odstranění:
$ aws s3api delete-object --key "název souboru" --version-id KdS5Yl0d06bBSYriIddtVb0h5gofiNX --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "VersionId": "KdS5Yl0d06bBSYriIddtVb0h5gofiNX" }
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "DeleteMarkers": [ { "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" }, "Key": "test-key-1", "VersionId": "ZfT16FPCe2xVMjTh-6qqfUzhQnLQMfg", "IsLatest": true, "LastModified": "2020-05-18T11:22:48.482Z" }, }
Obnova objektů
Obnova objektů
Pro obnovení objektu je doporučeným přístupem kopírování předchozí verze objektu do stejného bucketu. Zkopírovaný objekt se stane aktuální verzí objektu a všechny verze objektu zůstanou zachovány:
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": false, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } } ], "DeleteMarkers": [ { "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" }, "Key": "test-key-1", "VersionId": "hxV8on0vry4Oz0FNcgsz88aDcQoZO.y", "IsLatest": true, "LastModified": "2020-05-18T11:21:57.544Z" } ] }
$ aws s3api copy-object --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz --copy-source "název bucketu"/"název souboru"?versionId=xNQC4pIgMYx59digj5.gk15WC4efOOa --key "název souboru" { "CopyObjectResult": { "ETag": "5ec0f1a7fc3a60bf9360a738973f014d", "LastModified": "2020-05-18T13:28:52.553Z" } }
$ aws s3api list-object-versions --bucket "název bucketu" --profile "název profilu" --endpoint-url=https://s3.cl2.du.cesnet.cz { "Versions": [ { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "EYXgE1z-28VkVS4zTD55SetB7Wdwk1V", "IsLatest": true, "LastModified": "2020-05-18T13:28:52.553Z", "Owner": { "DisplayName": "Testovaci", "ID": "strnad$strnad" } }, { "ETag": "\"5ec0f1a7fc3a60bf9360a738973f014d\"", "Size": 13, "StorageClass": "STANDARD", "Key": "test-key-1", "VersionId": "xNQC4pIgMYx59digj5.gk15WC4efOOa", "IsLatest": false, "LastModified": "2020-05-18T10:34:05.072Z", "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" } } ], "DeleteMarkers": [ { "Owner": { "DisplayName": "Testovaci", "ID": "user$tenant" }, "Key": "test-key-1", "VersionId": "hxV8on0vry4Oz0FNcgsz88aDcQoZO.y", "IsLatest": false, "LastModified": "2020-05-18T11:21:57.544Z" } ] }
CESNET, z. s. p. o.
Generála Píky 26
160 00 Praha 6
Tel: +420 234 680 222
Fax: +420 224 320 269
info@cesnet.cz
Tel: +420 234 680 222
GSM: +420 602 252 531
Fax: +420 224 313 211
support@cesnet.cz