Gérer des versions dans un Bucket

Par défaut, le service de Stockage Objet cegedim.cloud ne fournit pas de capacités de sauvegarde. Cela signifie que si vous supprimez accidentellement un objet, il n'est pas possible de le restaurer.

Le versionnage consiste à conserver plusieurs versions d'un objet dans le même Bucket. Vous pouvez utiliser la fonctionnalité S3 Versioning pour préserver, récupérer et restaurer chaque version de chaque objet stocké dans votre Bucket.

Grâce à la gestion des versions, vous pouvez vous même restaurer facilement vos objets suite à des actions involontaires d'utilisateurs ou d'applications défaillantes.

Les Buckets dont la gestion des versions est activée peuvent vous aider à récupérer des objets après une suppression ou un écrasement accidentel. Par exemple, si vous supprimez un objet, un marqueur de suppression est créé au lieu de le supprimer définitivement.

Le marqueur de suppression devient la version actuelle de l'objet. Si vous écrasez un objet, il en résulte une nouvelle version de l'objet dans le Bucket.

Par défaut, le versionnage S3 est désactivé sur les Buckets et vous devez l'activer explicitement. Pour gérer les versions de Bucket et d'objet, vous pouvez utiliser le client AWS CLI ou tout autre outil compatible avec l'API AWS S3.

Facturation

Vous serez facturé pour l'espace utilisé par l'ensemble des versions d'un objet.

Limitations

Le nombre maximum de version conseillé pour un objet et de 50 000. Il est déconseillé d'aller au-delà de ce seuil.

Obtenir l'état actuel du versionnage d'un Bucket

Nous utilisons les utilitaires aws s3 et aws s3api issues du client S3 AWSCLIv2 sur Linux.${S3_ENDPOINT} &${S3_PROFILE} sont des variables d'environnement

Si la gestion des versions n'a jamais été défini sur un Bucket, il n'a pas d'état de versionnage. L'utilisation de la CLI AWS aws s3api , get-bucket-versioning, ne renvoie rien :

aws s3api --endpoint-url=${S3_ENDPOINT} get-bucket-versioning --bucket my-bucket --profile ${S3_PROFILE}

Pour un Bucket avec le versionnage activé :

aws s3api --endpoint-url=${S3_ENDPOINT} get-bucket-versioning --bucket my-bucket --profile ${S3_PROFILE}
résultat
{
    "Status": "Enabled"
}

Pour un Bucket avec versionnage suspendu :

aws s3api --endpoint-url=${S3_ENDPOINT} get-bucket-versioning --bucket my-bucket --profile ${S3_PROFILE}
résultat
{
    "Status": "Suspended"
}

Activer le versionnage sur un Bucket

aws s3api --endpoint-url=${S3_ENDPOINT} put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled --profile ${S3_PROFILE}

Suspendre le versionnage sur un Bucket

Une fois que le versionnage est activé sur un Bucket, il ne peut plus être supprimé. Mais vous avez la possibilité de la suspendre.

aws s3api --endpoint-url=${S3_ENDPOINT} put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Suspended --profile ${S3_PROFILE}

Gérer les versions des objets

Lister les versions des objets

Vous pouvez utiliser la fonction list-object-versions de la commande s3api à partir de l'AWSCLI :

aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
résultat
{
    "Versions": [
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427517621",
            "IsLatest": true,
            "LastModified": "2022-10-22T08:31:57.621Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        },
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427487088",
            "IsLatest": false,
            "LastModified": "2022-10-22T08:31:27.088Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        }
    ]
}

Pour obtenir une version spécifique d'un objet en utilisant get-object et --version-id <Version ID>

aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api get-object --bucket my-bucket --key feather.ttf --version-id 1666427487088 feather_1666427487088.ttf
résultat
{
    "LastModified": "Sat, 22 Oct 2022 08:31:27 GMT",
    "ContentLength": 81512,
    "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
    "VersionId": "1666427487088",
    "ContentType": "font/ttf",
    "Metadata": {}
}

Supprimer un objet dans un Bucket où le versionnage est activé

aws --profile=${S3_PROFILE} --endpoint ${S3_ENDPOINT} s3api delete-object --bucket my-bucket --key feather.ttf
Résultat
{
    "DeleteMarker": true,
    "VersionId": "1666428023859"
}
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
Résultat
{
    "Versions": [
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427517621",
            "IsLatest": false,
            "LastModified": "2022-10-22T08:31:57.621Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        },
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427487088",
            "IsLatest": false,
            "LastModified": "2022-10-22T08:31:27.088Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        }
    ],
    "DeleteMarkers": [
        {
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            },
            "Key": "feather.ttf",
            "VersionId": "1666428023859",
            "IsLatest": true,
            "LastModified": "2022-10-22T08:40:23.859Z"
        }
    ]
}

Restaurer vos objets

Un marqueur de suppression (DeleteMarker)d'un objet, a également un identifiant de version, vous pouvez le supprimer en utilisant son identifiant de version afin de restaurer votre objet.

aws --profile=${S3_PROFILE} --endpoint ${S3_ENDPOINT} s3api delete-object --bucket my-bucket --key feather.ttf --version-id 1666428023859
Output
{
    "DeleteMarker": true,
    "VersionId": "1666428023859"
}
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
Résultat
{
    "Versions": [
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427517621",
            "IsLatest": true,
            "LastModified": "2022-10-22T08:31:57.621Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        },
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427487088",
            "IsLatest": false,
            "LastModified": "2022-10-22T08:31:27.088Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        }
    ]
}

Supprimer une version spécifique d'un objet

Vous pouvez supprimer une version spécifique sur un objet. Si la version spécifiée n'est pas la version courante, la version spécifiée de l'objet est supprimée et aucun marqueur de suppression (DeleteMarker) n'est créé.

aws --profile=${S3_PROFILE} --endpoint ${S3_ENDPOINT} s3api delete-object --bucket my-bucket --key feather.ttf --version-id 1666427487088
Résultat
{
    "VersionId": "1666427487088"
}
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
Résultat
{
    "Versions": [
        {
            "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
            "Size": 81512,
            "StorageClass": "STANDARD",
            "Key": "feather.ttf",
            "VersionId": "1666427517621",
            "IsLatest": true,
            "LastModified": "2022-10-22T08:31:57.621Z",
            "Owner": {
                "DisplayName": "fwd37xbv8237hyhx2wkm",
                "ID": "fwd37xbv8237hyhx2wkm"
            }
        }
    ]
}

Dernière mise à jour