Simple Object Storage versioning
Simple Object Storage’s versioning and lock support lets you protect and archive data in your applications. It prevents data loss and enables you to restore objects that are accidentally deleted or overwritten via the user interface or API.
In progress
Please note that Web portal support for versioning is currently in progress and will be released soon.
Versioning
By default buckets are un-versioned and versioning needs to be activated. Once activated, it will modify the following behaviors for an object:
- If an object is deleted, SOS will instead keep the object and add the delete marker. Therefore the object could still be restored.
- If an object is overwritten, then SOS will create a new version instead to the object keeping the previous one intact. The previous version can be then restored any time referring to its version ID.
Object Lock
Exoscale SOS implements the S3 compatible object lock feature with the Legal hold feature. An object bearing the lock protection cannot be deleted indefinitely until the legal hold has been explicitly removed.
Pricing considerations
Bucket versioning is a free feature and does not trigger additional charges when activated on a bucket whether it is used or not. However there is a cost implied by having multiple versions of an object. For example, if you have 5 versions of an object, each version 1 GB of storage volume, then your charge will be for 5 GB.
Object lock is as well a free feature, with the normal SOS charge applying for the duration the object is stored on Exoscale.
Getting Started
This guide will walk you through various operations involving bucket versioning and locking using the Minio client, one of the open-source tools compatible with S3 for managing your buckets.
Prerequisites:
-
Install the Minio client by referring to the official Minio documentation here.
-
Obtain an access key and a secret key to manage your buckets using the Minio client. For detailed instructions, please refer to our guide here.
Configure the Minio client
mc config host add myminio https://sos-de-fra-1.exo.io
Storage API Endpoint: https://sos-{zone}.exo.io
Replace {zone} with the intended value. Available sos zones are : ch-dk-2, ch-gva-2, de-fra-1, de-muc-1, at-vie-1, at-vie-2, bg-sof-1.
Create a bucket
mc mb --with-lock myminio/mylockedbucket
Note
You can only enable object locking during bucket creation as per S3 behavior. You cannot enable object locking on a bucket created without locking enabled. You can then configure object retention rules at any time. object locking requires versioning and enables the feature implicitly.
Listing buckets
mc ls myminio
Listing bucket content recursively
mc ls --recursive myminio/mylockedbucket
Verify bucket versioning status
mc stat myminio/mylockedbucket
Name : mylockedbucket
Date : 2023-10-26 22:10:26 CET
Size : N/A
Type : folder
Properties:
Versioning: Enabled
Location: de-fra-1
Anonymous: Disabled
ILM: Disabled
Usage:
Total size: 0 B
Objects count: 0
Versions count: 0
Upload an object to bucket
mc cp file_to_upload.txt myminio/mylockedbucket
List all versions of my objects in a bucket
mc ls --versions myminio/mylockedbucket
Delete a specific version of an object
mc rm myminio/mylockedbucket/file_to_upload.txt --version-id "916619044952888425"
Remove a bucket and all its content
mc rb --force myminio/mylockedbucket
Set up the lock configuration for a bucket
mc retention set --default GOVERNANCE "30d" myminio/mylockedbucket
For additional details on Retention MODE and DURATION, please refer to this guide.
Show bucket configuration
Now that lock configuration was set, the stat
command shows its status:
mc stat myminio/mylockedbucket
Name : mylockedbucket
Date : 2023-10-26 23:33:34 CET
Size : N/A
Type : folder
Properties:
Versioning: Enabled
LockConfiguration:
RetentionMode: GOVERNANCE
Retention Until Date: 30DAYS
Location: de-fra-1
Anonymous: Disabled
ILM: Disabled
Usage:
Total size: 0 B
Objects count: 0
Versions count: 0
Alternatively:
mc retention info myminio/mylockedbucket
Object locking 'GOVERNANCE' is configured for 30DAYS.