# 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.

Vous pouvez utiliser une **configuration de cycle de vie** pour supprimer les versions de vos objets : [#vider-un-bucket](https://academy.cegedim.cloud/francais/stockage/stockage-objet/stockage-objet-didacticiels/..#vider-un-bucket "mention")

## Obtenir l'état actuel du versionnage d'un Bucket <a href="#usingversioningbuckets-obtenirletatactuelduversionnementdunbucket" id="usingversioningbuckets-obtenirletatactuelduversionnementdunbucket"></a>

{% hint style="info" %}
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
{% endhint %}

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 :

{% code overflow="wrap" %}

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

{% endcode %}

Pour un Bucket avec le versionnage **activé** :

{% code overflow="wrap" %}

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

{% endcode %}

{% code title="résultat" %}

```json
{
    "Status": "Enabled"
}
```

{% endcode %}

Pour un **Bucket** avec versionnage **suspendu** :

{% code overflow="wrap" %}

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

{% endcode %}

{% code title="résultat" %}

```json
{
    "Status": "Suspended"
}
```

{% endcode %}

## Activer le versionnage sur un Bucket <a href="#usingversioningbuckets-activerleversionnementsurunbucket" id="usingversioningbuckets-activerleversionnementsurunbucket"></a>

{% code overflow="wrap" %}

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

{% endcode %}

## Suspendre le versionnage sur un Bucket <a href="#usingversioningbuckets-suspendreleversionnementsurunbucket" id="usingversioningbuckets-suspendreleversionnementsurunbucket"></a>

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

{% code overflow="wrap" %}

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

{% endcode %}

## Gérer les versions des objets <a href="#usingversioningbuckets-gererlesversionsdesobjets" id="usingversioningbuckets-gererlesversionsdesobjets"></a>

### Lister les versions des objets <a href="#usingversioningbuckets-listerlesversionsdesobjets" id="usingversioningbuckets-listerlesversionsdesobjets"></a>

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

{% code overflow="wrap" %}

```bash
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
```

{% endcode %}

{% code title="résultat" lineNumbers="true" %}

```json
{
    "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"
            }
        }
    ]
}
```

{% endcode %}

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

{% code overflow="wrap" %}

```bash
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api get-object --bucket my-bucket --key feather.ttf --version-id 1666427487088 feather_1666427487088.ttf
```

{% endcode %}

{% code title="résultat" lineNumbers="true" %}

```json
{
    "LastModified": "Sat, 22 Oct 2022 08:31:27 GMT",
    "ContentLength": 81512,
    "ETag": "\"2232dadea2f05fa28e3f08b5b3346df9\"",
    "VersionId": "1666427487088",
    "ContentType": "font/ttf",
    "Metadata": {}
}
```

{% endcode %}

### Supprimer un objet dans un Bucket où le versionnage est activé <a href="#usingversioningbuckets-supprimerunobjetdansunbucketouleversionnementestactive" id="usingversioningbuckets-supprimerunobjetdansunbucketouleversionnementestactive"></a>

{% code overflow="wrap" %}

```
aws --profile=${S3_PROFILE} --endpoint ${S3_ENDPOINT} s3api delete-object --bucket my-bucket --key feather.ttf
```

{% endcode %}

{% code title="Résultat" %}

```json
{
    "DeleteMarker": true,
    "VersionId": "1666428023859"
}
```

{% endcode %}

{% code overflow="wrap" %}

```bash
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
```

{% endcode %}

{% code title="Résultat" lineNumbers="true" %}

```json
{
    "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"
        }
    ]
}
```

{% endcode %}

### Restaurer vos objets <a href="#usingversioningbuckets-restaurervosobjets" id="usingversioningbuckets-restaurervosobjets"></a>

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.

{% code overflow="wrap" %}

```bash
aws --profile=${S3_PROFILE} --endpoint ${S3_ENDPOINT} s3api delete-object --bucket my-bucket --key feather.ttf --version-id 1666428023859
```

{% endcode %}

{% code title="Output" %}

```json
{
    "DeleteMarker": true,
    "VersionId": "1666428023859"
}
```

{% endcode %}

{% code overflow="wrap" %}

```bash
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
```

{% endcode %}

{% code title="Résultat" lineNumbers="true" %}

```json
{
    "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"
            }
        }
    ]
}
```

{% endcode %}

### Supprimer une version spécifique d'un objet <a href="#usingversioningbuckets-supprimeruneversionspecifiquedunobjet" id="usingversioningbuckets-supprimeruneversionspecifiquedunobjet"></a>

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éé.

{% code overflow="wrap" %}

```bash
aws --profile=${S3_PROFILE} --endpoint ${S3_ENDPOINT} s3api delete-object --bucket my-bucket --key feather.ttf --version-id 1666427487088
```

{% endcode %}

{% code title="Résultat" %}

```json
{
    "VersionId": "1666427487088"
}
```

{% endcode %}

{% code overflow="wrap" %}

```bash
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
```

{% endcode %}

{% code title="Résultat" lineNumbers="true" %}

```json
{
    "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"
            }
        }
    ]
}
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://academy.cegedim.cloud/francais/stockage/stockage-objet/stockage-objet-didacticiels/gerer-des-versions-dans-un-bucket.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
