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" }