Table of Contents

Scalia versioning en lifecycle management

Inleiding

Voorheen was het bij Scalia mogelijk bestanden te restoren indien er snel werd gereageerd. Dagelijks vond een sync plaats naar een redundant filesysteem vanaf waar de bestanden uiterlijk binnen een dag konden worden teruggezet. De dagelijkse sync is nu vervangen door een stream waardoor een verwijderd / gewijzigd bestand ook direct wordt verwijderd / gewijzigd op het redundant filesysteem en dus de restoremogelijkheid niet meer aanwezig is. Om in de nieuwe situatie weer te kunnen restoren hebben we versioning met lifecycle management geconfigureerd. De default configuratie zorgt er voor dat files tot 30 dagen oud kunnen worden teruggezet.

Versioning zorgt ervoor dat als een file wordt gewijzigd er een kopie wordt gemaakt en de oude versie blijft bestaan. Voor iedere nieuwe wijziging wordt een nieuwe kopie gemaakt. Oude versies kunnen worden hersteld met “aws s3api” commando's. We hebben de versioning zo geconfigureerd dat oude versies voor 30 dagen worden bewaard en daarna worden verwijderd. Als een actieve file op het filesysteem wordt verwijderd dan wordt deze onder water niet echt verwijderd maar wordt er een delete marker gezet. Hierdoor zie je de file niet meer met bijvoorbeeld een file browser of ls commando maar bestaat hij nog wel als S3 object. Je kunt de laatste ( of eerdere ) versie weer activeren met “aws s3api” commando's. Indien een bestand waarvan de delete marker actief is niet binnen 30 dagen wordt teruggezet dan zal hij definitief worden verwijderd.

Kosten

Bij Scalia worden geen kosten berekend voor de versioning. Wel is het zo dat iedere kopie van een file dezelfde hoeveelheid schijfruimte gebruikt als de oorspronkelijke file dus de de kosten van het datagebruik zullen wel toenemen. Deze is nu 55 euro per extra Terabyte per maand.

Activeren van versioning en lifecycle management

Versioning kan per bucket worden enabled. Je kunt hierna de versioning niet meer disablen, alleen suspenden. Dit houdt in dat er geen nieuwe versies meer worden gemaakt. Enablen kan met s3cmd ( https://s3tools.org/download )

Zorg voor een configuratiefile voor de access, bv scalia.conf met de volgende inhoud:

[default]
# Object Storage Region NL-AMS-1
host_base = objectstorage.nl-ams-1.scalia.io
host_bucket = %(bucket)s.objectstorage.nl-ams-1.scalia.io
use_https = True
 
# Login credentials
access_key = <access key>
secret_key = <secret key> 

Gebruik de juiste access en secret keys voor de buckets die je wilt configureren

Hierna kun je de versioning enablen met:

s3cmd -c scalia.conf setversioning s3://<bucket naam>  enable 

Daarna kan de lifecycle policy worden geconfigureerd. Onderstaande policy bewaart oudere versies 30 dagen waarna ze worden verwijderd. Maak een file aan, bv lifecyclepolicy.xml met de volgende inhhoud:

<LifecycleConfiguration>
  <Rule>
    <ID>DeleteNonCurrentVersionsAfter30Days</ID>
    <Status>Enabled</Status>
    <Filter>
      <Prefix></Prefix>
    </Filter>
    <NoncurrentVersionExpiration>
      <NoncurrentDays>30</NoncurrentDays>
    </NoncurrentVersionExpiration>
  </Rule>
  <Rule>
    <ID>DeleteExpiredMarkers</ID>
    <Status>Enabled</Status>
    <Filter>
      <Prefix></Prefix>
    </Filter>
    <Expiration>
      <ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

Deze kan worden geactiveerd voor een bucket met:

s3cmd -c scalia.conf setlifecycle lifecyclepolicy.xml s3://<bucket naam>

Vervolgens kun je de versioning en lifecycle policy checken met:

 
s3cmd info s3://<bucket naam>  -c <config file>  | grep Versioning 
s3cmd getlifecycle s3://<bucket naam> -c <config file>

Versioning commando's

configuratie voor aws versioning commando's

Een recente versie van de aws cli tool moet geinstalleerd moet zijn. Voor de toegang tot de API voor de bucket is de volgende entry nodig in ~/.aws/credentials

[scalia]
aws_access_key_id = <De  access key ID> 
aws_secret_access_key = <De access key secret>

Daarna kan de AWS_PROFILE worden gezet:

export AWS_PROFILE=scalia

Versies weergeven

Om de versies van een file.txt in test-bucket weer te geven:

aws s3api list-object-versions --endpoint-url https://objectstorage.nl-ams-1.scalia.io --bucket test-bucket  --prefix file.txt

De output is bijvoorbeeld:

    "Versions": [
        {
            "ETag": "\"81127ad129dd2249f5ab0667ca0aeb84\"",
            "Size": 10,
            "StorageClass": "STANDARD",
            "Key": "file.txt",
            "VersionId": "c9sE-kdB-bEkdtGRuJ4IMG.bdsaguem",
            "IsLatest": true,
            "LastModified": "2025-06-05T11:35:09.443000+00:00",
            "Owner": {
                "DisplayName": "NPO Tendant 1000",
                "ID": "npo:w8jw72hjf9-wd9d-md3d-evwe-azwdwd8hhp17"
            }
        },
        {
            "ETag": "\"81127ad129dd2249f5ab0667ca0aeb84\"",
            "Size": 10,
            "StorageClass": "STANDARD",
            "Key": "file.txt",
            "VersionId": "e2JyOFFzHUjRwGgcUjiUQvzqyBxk38d",
            "IsLatest": false,
            "LastModified": "2025-06-05T11:34:57.308000+00:00",
            "Owner": {
                "DisplayName": "NPO Tendant 1000",
                "ID": "npo:w8jw72hjf9-wd9d-md3d-evwe-azwdwd8hhp17"
            }
        }
    ],
    "RequestCharged": null,
    "Prefix": "file.txt"
}

De bovenste entry heeft een “IsLatest”: true entry. Dit geeft aan dat dit de actieve versie is, De 2 entry met “IsLatest”: false is een inactieve kopie, dus een oude versie. Als je deze terug wil zetten dan kan dat met het volgende commando:

Versie terugzetten

aws s3api copy-object --bucket test-bucket --copy-source test-bucket/file.txt?versionId=e2JyOFFzHUjRwGgcUjiUQvzqyBxk38d --key file.txt --endpoint-url https://objectstorage.nl-ams-1.scalia.io

Je kan de versie ook eerst naar lokaal kopieren om de inhoud te bekijken.

aws s3api get-object --bucket test-bucket --key file.txt --version-id e2JyOFFzHUjRwGgcUjiUQvzqyBxk38d file.txt --endpoint-url https://objectstorage.nl-ams-1.scalia.io

Als je de gedownloade file weer met standaard filsystem commando's terugkopieert naar de scalia bucket dan zal deze ook als de actieve versie worden gezet.

Een ge-delete file terugzetten

Je kunt een ge-delete file terug zetten door de delete marker te verwijderen. Hieronder zie je een voorbeeld van een ge-delete file met een delete marker De delete marker is ook een versie van het object. In dit geval is het de laatste versie ( “IsLatest”: true, ) waardoor de file niet te zien is op het filesysteem.

 
aws s3api list-object-versions --endpoint-url https://objectstorage.nl-ams-1.scalia.io --bucket test-bucket --prefix file.txt
{
    "Versions": [
        {
            "ETag": "\"81127ad129dd2249f5ab0667ca0aeb84\"",
            "Size": 10,
            "StorageClass": "STANDARD",
            "Key": "file.txt",
            "VersionId": "c9sE-kdB-bEkdtGRuJ4IMG.bdsaguem",
            "IsLatest": false,
            "LastModified": "2025-06-05T11:35:09.443000+00:00",
            "Owner": {
                "DisplayName": "NPO Tendant 1000",
                "ID": "npo:w8jw72hjf9-wd9d-md3d-evwe-azwdwd8hhp17"
            }
        },
        {
            "ETag": "\"81127ad129dd2249f5ab0667ca0aeb84\"",
            "Size": 10,
            "StorageClass": "STANDARD",
            "Key": "file.txt",
            "VersionId": "e2JyOFFzHUjRwGgcUjiUQvzqyBxk38d",
            "IsLatest": false,
            "LastModified": "2025-06-05T11:34:57.308000+00:00",
            "Owner": {
                "DisplayName": "NPO Tendant 1000",
                "ID": "npo:w8jw72hjf9-wd9d-md3d-evwe-azwdwd8hhp17"
            }
        }
    ],
    "DeleteMarkers": [
        {
            "Owner": {
                "DisplayName": "NPO Tendant 1000",
                "ID": "npo:w8jw72hjf9-wd9d-md3d-evwe-azwdwd8hhp17"
            },
            "Key": "file.txt",
            "VersionId": "CqvF8t0zPMzZLNMjKRI1VLmz1vCCRfd",
            "IsLatest": true,
            "LastModified": "2025-06-05T14:09:24.115000+00:00"
        }
    ],
    "RequestCharged": null,
    "Prefix": "file.txt"
}

Je kunt de delete marker verwijderen met:

aws s3api delete-object --bucket test-bucket --endpoint-url https://objectstorage.nl-ams-1.scalia.io --key test.text --version-id CqvF8t0zPMzZLNMjKRI1VLmz1vCCRfd

Je kan ook een file restoren door een eerdere versie terug te zetten:

aws s3api copy-object --bucket test-bucket --copy-source test-bucket/file.txt?versionId=c9sE-kdB-bEkdtGRuJ4IMG.bdsaguem --key file.txt --endpoint-url https://objectstorage.nl-ams-1.scalia.io

Documentatie

Uitleg voor de lifecyclepolicy: https://docs.aws.amazon.com/AmazonS3/latest/API/API_NoncurrentVersionExpiration.html