Object Storage - Gestion intelligente du stockage avec des règles lifecycle

Base de connaissances

Object Storage - Gestion intelligente du stockage avec des règles lifecycle


Icons/System/eye-open Created with Sketch. 166 vues 06.03.2026 Cloud / Object Storage S3

Objectif

Découvrez comment optimiser vos coûts de stockage avec les règles lifecycle d'OVHcloud.

Cette fonctionnalité n'est pas prise en charge par le endpoint legacy .perf et n'est disponible que via le endpoint .io. Pour plus d'informations sur les différences entre les deux endpoints, veuillez consulter cette documentation.

Introduction

Qu'est-ce qu'un lifecycle ?

Le bucket lifecycle dans OVHcloud Object Storage est une fonctionnalité qui vous permet d'optimiser vos coûts de stockage en gérant vos objets tout au long de leur cycle de vie (lifecycle). En téléversant une configuration de lifecycle vers un bucket, vous définissez un ensemble de règles que la solution Object Storage applique aux objets du bucket pour effectuer des actions spécifiques.

Il y a 2 types d'actions qu'OVHcloud Object Storage effectue sur vos objets :

  • expiration : ces actions déterminent la date d'expiration de vos objets. Les objets expirés sont alors automatiquement supprimés.
  • transition : ces actions déterminent le moment où vos objets sont transférés vers un niveau de stockage moins coûteux. Par exemple, vous pourriez vouloir transférer vos objets stockés dans le niveau Haute performance vers le niveau Standard après 30 jours.

Exemples de cas d'usage

La configuration du lifecycle vous permet de demander à OVHcloud Object Storage de :

  • nettoyer les téléversements multi-parties incomplets : supposons que vous ayez téléversé un grand nombre d'objets volumineux (>5GB) en utilisant des téléversements multi-parties, mais que pour certaines raisons, pour de nombreux objets, le téléversement multi-parties ne s'est pas terminé avec succès. Dans ce cas, même si vous n'avez pas téléversé toutes les parties d'un objet, vous devez quand même payer le coût de stockage des parties téléversées. Dans ce cas, vous pourriez vouloir nettoyer les parties de tous les téléversements multi-parties incomplets afin d'économiser de l'argent.
  • nettoyer les anciennes données inutilisées : supposons que vous ayez une application qui stocke ses logs dans un bucket. Votre organisation peut définir une politique de conservation des logs de 30 jours. Passé ce délai, les logs ne sont plus nécessaires et vous voudrez peut-être les supprimer pour économiser de l'argent.
  • optimiser les coûts de stockage en transférant les données rarement consultées vers un niveau de stockage moins coûteux : supposons que vous ayez certains fichiers qui sont souvent utilisés pendant une brève période avant d'être à peine réutilisés. Vous n'aurez peut-être plus besoin d'y accéder immédiatement, mais votre organisation ou la législation peut vous obliger à les conserver pendant un certain temps. Une fois ce délai écoulé, vous pouvez les supprimer pour économiser de l'argent.

Considérations particulières

Lorsqu'un objet atteint la fin de sa durée de vie selon la configuration de son lifecycle, le résultat des actions de transition ou d'expiration effectuées par OVHcloud Object Storage varie en fonction de l'état de versioning du bucket :

  • non versionné : il n'existe qu'une seule version de l'objet, la version courante, et elle est supprimée définitivement.
  • versionné : un marqueur de suppression est créé et devient la version courante. Vous pouvez également choisir le nombre d'anciennes versions que vous souhaitez conserver. Si la version courante de l'objet est la seule version de l'objet et qu'il s'agit également d'un marqueur de suppression, ce dernier sera supprimé.
  • versioning suspendu : actuellement, nous ne permettons pas la suspension du versioning si vous avez une configuration de lifecycle en vigueur. De la même manière, nous ne permettons pas le téléversement d'une configuration de lifecycle si le versioning est suspendu sur le bucket.

Expiration

Les règles de lifecycle sont traitées de manière asynchrone et dans la mesure du possible. La plupart des règles sont appliquées dans les 24 heures, mais cela peut prendre plus de temps dans le cas d'un très grand nombre d'objets ou lors du traitement de nombreux objets. Pendant ce délai, vous continuez à être facturé pour le niveau de stockage actuel de l'objet, même si la règle (par exemple, l'expiration ou la transition) a déjà été déclenchée mais n'est pas encore terminée. Par exemple, si un objet doit être supprimé le 30e jour, mais qu'il n'est traité que le 32e jour, vous pouvez être facturé pour deux jours supplémentaires.

Dates d'expiration conflictuelles

En règle générale, la fonction lifecycle est conçue pour vous aider à optimiser vos coûts de stockage. Par exemple, si deux règles d'expiration se chevauchent, c'est-à-dire qu'elles ciblent le même ensemble d'objets mais avec des dates d'expiration différentes, la règle avec la durée la plus courte est appliquée, garantissant que les données ne sont pas conservées au-delà du délai prévu : OVHcloud Object Storage essaie toujours de choisir la voie la plus rentable pour vous.

En règle générale, lorsque plusieurs règles s'appliquent au même ensemble d'objets dans une configuration de bucket lifecycle :

  • La suppression permanente a la priorité sur la transition.
  • La transition a la priorité sur la création de marqueurs de suppression.
  • La date d'expiration/de transition la plus courte a la priorité sur la plus longue.

Versions courantes et versions non courantes

Dans un bucket versionné, chaque objet a une version courante et zéro ou plusieurs versions non courantes. Lorsque vous supprimez un objet :

  • Si vous ne spécifiez pas d'identifiant de version dans votre demande de suppression, un marqueur de suppression est créé au lieu de supprimer l'objet. La version courante de l'objet devient non courante et le marqueur de suppression devient la version courante.
  • Si vous spécifiez un ID de version dans votre demande de suppression, la version de l'objet spécifiée est définitivement supprimée (aucun marqueur de suppression n'est créé).
  • Un marqueur de suppression avec zéro version non courante est appelé marqueur de suppression d'objet expiré.

Configuration

La version 1 de la configuration d'un lifecycle (avec l'attribut Prefix en dehors de Filter) est obsolète. Nous tolérons la version 1 en transformant automatiquement le json pour qu'il corresponde au format de la version 2. Cependant, nous vous conseillons vivement de n'utiliser que la version 2, comme décrit ci-dessous.

Voici la structure de base d'une configuration JSON pour un lifecycle contenant des règles d'expiration

{
  "Rules": [
    {
      "ID": "string",
      "Status": "Enabled"|"Disabled",
      "Filter": {
        "Prefix": "string",
        "Tag": {
          "Key": "string",
          "Value": "string"
        },
        "ObjectSizeGreaterThan": long,
        "ObjectSizeLessThan": long,
        "And": {
          "Prefix": "string",
          "Tags": [
            {
              "Key": "string",
              "Value": "string"
            }
          ],
          "ObjectSizeGreaterThan": long,
          "ObjectSizeLessThan": long
        }
      },
      "Expiration": {
        "Date": timestamp,
        "Days": integer,
        "ExpiredObjectDeleteMarker": "true"|"false"
      },
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": integer,
        "NewerNoncurrentVersions": integer
      },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": integer
      }
    }
  ]
}
AttributRequisDescription
RulesouiTableau de règles de lifecycle
IDouiUn identifiant unique pour une règle de lifecycle.
StatusouiIndique si une règle de lifecycle est activée ou désactivée.
FilterouiUn filtre qui identifie le sous-ensemble d'objets auquel la règle de réplication s'applique. Pour répliquer tous les objets du bucket, spécifiez un objet vide.
Filter.PrefixnonUn préfixe de nom de clé d'objet qui identifie l'objet ou les objets auxquels la règle s'applique. Pour inclure tous les objets dans un bucket, spécifiez une chaîne vide.
Filter.TagnonFiltrer les objets par clé et/ou valeur de tag.
Filter.Tag.KeynonClé du filtre de tag.
Filter.Tag.ValuenonValeur du filtre de tag.
Filter.ObjectSizeGreaterThannonTaille minimale de l'objet auquel la règle s'applique.
Filter.ObjectSizeLessThannonTaille maximale de l'objet auquel la règle s'applique.
Filter.AndnonVous pouvez appliquer plusieurs critères de sélection dans le filtre. Un AND logique s'applique à plusieurs critères de filtrage.
Filter.And.TagsnonUn tableau de filtres de tag. Tous les tags du tableau doivent exister dans les tags de l'objet pour que la règle s'applique.
Expirationoui*Une action de lifecycle qui applique une opération de suppression à l'ensemble des objets filtrés.

⚠️ Obligatoire si Transitions ou AbortIncompleteMultipartUpload n'est pas présent.
Expiration.Datenon*Indique la date à laquelle les objets doivent être supprimés. La valeur de la date doit être au format ISO 8601 et l'heure doit toujours être fixée à minuit UTC.

⚠️ Cet attribut n'est pas obligatoire si Days est présent.
⚠️ Cet attribut s'exclut mutuellement avec Days, c'est-à-dire que vous avez soit Date, soit Days, mais vous ne pouvez pas spécifier les deux.
Expiration.Daysoui*Indique la durée en jours après laquelle les objets doivent être supprimés. La valeur doit être un nombre entier égal ou supérieur à 1.

⚠️ Cet attribut est obligatoire si Date n'est pas présent.
⚠️ Cet attribut s'exclut mutuellement avec Date, c'est-à-dire que vous avez soit Date, soit Days, mais vous ne pouvez pas spécifier les deux.
Expiration.ExpiredObjectDeleteMarkernonIndique si OVHcloud Object Storage doit immédiatement supprimer les marqueurs de suppression qui n'ont pas de versions non courantes (marqueurs de suppression expirés).

⚠️ Vous ne pouvez pas spécifier Days ou Date avec ExpiredObjectDeleteMarker dans la même règle. Lorsque vous spécifiez Days/Date, les marqueurs de suppression expirés sont automatiquement supprimés comme des objets normaux lorsqu'ils satisfont aux critères d'âge. ExpiredObjectDeleteMarker est utilisé pour nettoyer les marqueurs de suppression dès qu'ils deviennent la seule version. Vous devez créer une règle séparée avec uniquement l'attribut ExpiredObjectDeleteMarker dans Expiration.
⚠️ Lorsque vous utilisez l'action de lifecycle ExpiredObjectDeleteMarker, la règle ne peut pas spécifier un filtre basé sur un tag.
NoncurrentVersionExpirationnonUne action de lifecycle qui indique quand les versions d'objets non courantes doivent être supprimées. Cette action n'affecte pas les versions courantes. Elle supprime uniquement les versions qui ne sont pas à jour.
NoncurrentVersionExpiration.NoncurrentDaysnonIndique le nombre de jours avant qu'une version non courante soit éligible à la suppression après qu'elle soit devenue non courante, c'est-à-dire l'âge minimum d'une version non courante.
NoncurrentVersionExpiration.NewerNoncurrentVersionsnonIndique le nombre de versions non courantes les plus récentes à conserver. Le maximum est de 100.

Exemple:
Supposons que vous ayez un objet B avec 10 versions :
- B v10 (current version, creation date: 2024-10-23)
- B v9 (non-current version, creation date: 2024-10-22)
- B v8 (non-current version, creation date: 2024-10-21)
- B v7 (non-current version, creation date: 2024-10-20)
- B v6 (non-current version, creation date: 2024-10-19)
- B v5 (non-current version, creation date: 2024-10-18)
- B v4 (non-current version, creation date: 2024-10-17)
- B v3 (non-current version, creation date: 2024-10-16)
- B v2 (non-current version, creation date: 2024-10-15)
- B v1 (non-current version, creation date: 2024-10-14)

Si NewerNoncurrentVersions=3, la règle de lifecycle supprimera toutes les versions non courantes à l'exception des trois plus récentes, à savoir v9, v8 et v7.
AbortIncompleteMultipartUploadnonUne action de lifecycle qui applique une opération de suppression sur les parties d'un téléversement multi-parties incomplet.
AbortIncompleteMultipartUpload.DaysAfterInitiationnonIndique le nombre de jours après lequel toutes les parties de tous les téléversements multi-parties incomplets sont supprimées et interrompt les téléversements multi-parties sous-jacents.

Comprendre le paramètre NoncurrentDays

Le paramètre NoncurrentDays définit le nombre minimum de jours écoulés depuis qu'une version n'est plus la version courante. Ce paramètre ne doit pas être confondu avec l'âge de l'objet mais indique plutôt l'âge minimum d'une version non-courante.

Exemple 1:

Supposons que vous avez un objet A avec 10 versions :

  • A v10 (version courante, date de création: 2024-10-23).
  • A v9 (version non-courante, date de création: 2024-10-22).
  • A v8 (version non-courante, date de création: 2024-10-21).
  • A v7 (version non-courante, date de création: 2024-10-20).
  • A v6 (version non-courante, date de création: 2024-10-19).
  • A v5 (version non-courante, date de création: 2024-10-18).
  • A v4 (version non-courante, date de création: 2024-10-17).
  • A v3 (version non-courante, date de création: 2024-10-16).
  • A v2 (version non-courante, date de création: 2024-10-15).
  • A v1 (version non-courante, date de création: 2024-10-14).

Si la date actuelle est 2024-10-23 et NoncurrentDays=5, la règle de lifecycle supprimera les versions non-courantes de plus de 5 jours : v1, v2, v3 et v4, car :

  • A v1 est non-courante depuis 2024-10-15 (quand A v2 a été créée) : son âge en tant que version non-courante est 8 jours.
  • A v2 est non-courante depuis 2024-10-16 (quand A v3 a été créée) : son âge en tant que version non-courante est 7 jours.
  • A v3 est non-courante depuis 2024-10-17 (quand A v4 a été créée) : son âge en tant que version non-courante est 6 jours.
  • A v4 est non-courante depuis 2024-10-18 (quand A v5 a été créée) : son âge en tant que version non-courante est 5 jours.

Exemple 2:

Supposons que vous avez un objet B avec 5 versions :

  • B v5 (version courante, date de création: 2024-10-28).
  • B v4 (version non-courante, date de création: 2024-10-27).
  • B v3 (version non-courante, date de création: 2024-10-20).
  • B v2 (version non-courante, date de création: 2024-10-15).
  • B v1 (version non-courante, date de création: 2024-10-14).

Si la date actuelle est 2024-10-29 et NoncurrentDays=5, la règle de lifecycle supprimera les versions non-courantes de plus de 5 jours : uniquement v1 et v2, car :

  • B v1 est non-courante depuis 2024-10-15 (quand B v2 a été créée) : son âge en tant que version non-courante est 14 jours.
  • B v2 est non-courante depuis 2024-10-20 (quand B v3 a été créée) : son âge en tant que version non-courante est 9 jours.

Obtenir la date d'expiration programmée

Si un objet est programmé pour être supprimé, un appel HEAD-OBJECT renvoie un en-tête de réponse http spécial x-amz-expiration qui contient un timestamp indiquant sa date d'expiration et un identifiant de la règle du lifecycle qui a été appliquée.

Le format de l'en-tête est le suivant : x-amz-expiration: expiry-date=<timestamp>, rule-id=<rule_id>

  • expiry-date : obtenue en additionnant la date de création et le délai d'expiration
  • rule-id : l'identifiant de la règle correspondante qui déclenche la suppression

Exemple : Obtenir la date d'expiration via un appel API http direct

HEAD /{key}
Host: {bucket}.s3.{region}.io.cloud.ovh.net
...

HTTP/1.1 200 OK
...
x-amz-expiration: expiry-date="Fri, 21 Dec 2024 00:00:00 GMT", rule-id="123456789"

Exemple : Obtenir la date d'expiration via le CLI

aws s3api head-object --bucket <bucket_name> --key <object_key>
{
  ...
  "Expiration" : "expiry-date=\"Fri, 21 Dec 2024 00:00:00 GMT\", rule-id=\"123456789\"",
  ...
}

Exemples de configurations d'expiration

Supprimer tous les objets d'un bucket non versionné

Étant donné que le bucket n'est pas versionné, la configuration suivante supprimera définitivement tous les objets du bucket au bout de 1 jour. Cependant, si vous avez des téléversements multi-parties incomplets, ceux-ci ne seront pas supprimés : pour vider complètement votre bucket, vous aurez besoin de règles supplémentaires.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": { },
      "Expiration": {
        "Days": 1
      }
    }
  ]
}
Abandonner les téléversements multi-parties incomplets

La configuration suivante demandera à OVHcloud Object Storage d'annuler tous les téléversements incomplets identifiés par le préfixe « /mpus » et de supprimer les parties déjà téléversées dans les 7 jours suivant leur lancement :

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "/mpus"
      },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": 7
      }
    }
  ]
}
Expirer des objets dans un bucket non versionné avec des préfixes qui se chevauchent

Dans la configuration suivante, il y a 2 règles de lifecycle :

  • La règle « 123456 » supprime définitivement tous les objets dont le préfixe est « old » 30 jours après leur création.
  • La règle « 456789 » supprime définitivement tous les objets dont le préfixe est « old/logs » 65 jours après leur création.

Le même ensemble d'objets est éligible aux deux règles de lifecycle. Dans ce cas, la première règle s'appliquera après 30 jours et la seconde sera alors ignorée car les objets auront déjà été supprimés.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "/old"
      },
      "Expiration": {
        "Days": 30
      }
    },
    {
      "ID": "456789",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "/old/logs"
      },
      "Expiration": {
        "Days": 65
      }
    }
  ]
}
Expirer des objets dans un bucket non versionné avec des tags qui se chevauchent

Dans la configuration suivante, il y a 2 règles de lifecycle :

  • La règle « 123456 » supprime définitivement tous les objets tagués « age » avec la valeur « old » 30 jours après leur création.
  • La règle « 456789 » supprime définitivement tous les objets tagués « type » avec la valeur « logs » 65 jours après leur création.

Si un objet porte les deux tags, c'est-à-dire si un objet est tagué « age » avec la valeur « old » et « type » avec la valeur « logs », la première règle s'appliquera après 30 jours et la deuxième règle sera alors ignorée parce que l'objet aura déjà été retiré.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "Tag": {
           "Key": "age",
           "Value": "old"
        }
      },
      "Expiration": {
        "Days": 30
      }
    },
    {
      "ID": "456789",
      "Status": "Enabled",
      "Filter": {        
        "Tag": {
           "Key": "type",
           "Value": "logs"
        }
      },
      "Expiration": {
        "Days": 65
      }
    }
  ]
}
Vider un bucket non-versionné

Étant donné que le bucket n'est pas versionné, la configuration suivante supprimera définitivement tous les objets et les téléversements multi-parties incomplets du bucket au bout de 1 jour:

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": { },
      "Expiration": {
        "Days": 1
      }
    },
    {
      "ID": "78910",
      "Status": "Enabled",
      "Filter": { },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": 1
      }
    }
  ]
}
Vider un bucket versionné.

Dans la configuration suivante, il existe 3 règles de cycle de vie :

  • la première règle expirera (insérera un marqueur de suppression) la version courante de tous les objets 1 jour après leur date de création et supprimera définitivement toutes les versions non courantes 1 jour après qu'elles soient devenues non courantes
  • la deuxième règle supprimera automatiquement tous les marqueurs de suppression expirés
  • la troisième règle supprimera automatiquement tous les téléversements multi-parties incomplets 1 jour après leur date de création
{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": { },
      "Expiration": {
        "Days": 1
      },
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": 1
      }
    },
    {
      "ID": "654789",
      "Status": "Enabled",
      "Filter": { },
      "Expiration": {
        "ExpiredObjectDeleteMarker": true
      }
    },
    {
      "ID": "963852",
      "Status": "Enabled",
      "Filter": { },
      "AbortIncompleteMultipartUpload": {
        "DaysAfterInitiation": 1
      }
    }
  ]
}

Transition

Transitions supportées

Seules les transitions d'un niveau de stockage plus coûteux vers un niveau de stockage moins coûteux sont autorisées.

Les transitions actuellement prises en charge sont les suivantes :

de/versHigh PerformanceStandardInfrequent AccessActive ArchiveCold Archive
High Performance-ouiouiouioui
Standardinterdit-ouiouioui
Infrequent Accessinterditinterdit-ouioui
Active Archiveinterditinterditinterdit-oui
Cold Archiveinterditinterditinterditinterdit-

Taille minimale de l'objet

OVHcloud Object Storage empêchera toute transition vers un autre niveau de stockage pour les objets inférieurs à 128Ko. Cependant, vous pouvez autoriser les transitions et les expirations pour les objets plus petits en utilisant les paramètres ObjectSizeGreaterThan ou ObjectSizeLessThan pour filtrer avec une taille minimale ou maximale. Dans l'exemple suivant, les objets de moins de 128 Ko sont également autorisés à passer à la classe Standard.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "And":{
            "ObjectSizeGreaterThan": 1
        }
      },      
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD"
        }
      ]
     }
  ]
}

Délai de transition minimal

La durée minimale des règles de transition est de 30 jours, ce qui signifie que votre configuration de lifecycle ne sera pas valide et que vous obtiendrez une erreur si le nombre de jours pour votre règle de transition est inférieur à 30 jours. En pratique, cela signifie que la fonction de lifecycle ne prendra en compte que les objets datant de plus de 30 jours. Par exemple, supposons que vous téléversez un objet dans le niveau de stockage High Performance et que vous souhaitez le faire passer au niveau de stockage Standard après un certain temps, puis de Standard à Standard Infrequent Access après un autre laps de temps. Cela signifierait que: - votre objet ne pourra passer de High Performance à Standard qu'après 30 jours - votre objet ne pourra passer de Standard à Standard Infrequent Access qu'après 60 jours (30 jours après la précédente transition)

Expiration vs transitions

Comme nous l'avons déjà mentionné, lorsque vous avez plusieurs règles dans une configuration de bucket lifecycle qui s'appliquent au même ensemble d'objets :

  • La suppression permanente a la priorité sur la transition.
  • La transition est prioritaire sur la création de marqueurs de suppression.
  • La date d'expiration/de transition la plus courte est prioritaire sur la plus longue.

Configuration

Voici la structure de base d'une configuration d'un lifecycle JSON contenant des règles de transition :

{
  "Rules": [
    {   
       ...

       "Transitions": [
           {
             "Date": timestamp,
             "Days": integer,
             "StorageClass": "STANDARD"
           }
        ],
       "NoncurrentVersionTransitions": [
          {
              "NoncurrentDays": integer,
              "StorageClass": "STANDARD",
              "NewerNoncurrentVersions": integer
          }
       ]
    }
  ]
}
AttributRequisDescription
Transitionsoui*Un tableau d'opérations lifecycle qui copient automatiquement tous les objets sélectionnés de leur niveau de stockage actuel vers le niveau de stockage le plus efficace.
Transitions.Datenon*Indique la date à laquelle les objets doivent être transférés. La valeur de la date doit être au format ISO 8601 et l'heure doit toujours être fixée à minuit UTC.

⚠️ Cet attribut n'est pas obligatoire si Days est présent.
⚠️ cet attribut s'exclut mutuellement avec Days, c'est-à-dire que vous avez soit Date, soit Days, mais vous ne pouvez pas spécifier les deux.
Transitions.Daysoui*Indique la durée en jours après laquelle les objets doivent être transférés. La valeur doit être un nombre entier égal ou supérieur à 30.

⚠️ Cet attribut est obligatoire si Date n'est pas présent.
⚠️ cet attribut s'exclut mutuellement avec Date, c'est-à-dire que vous avez soit Date, soit Days, mais vous ne pouvez pas spécifier les deux.
Transitions.StorageClassouiIndique la classe de stockage cible. Actuellement, seul « STANDARD » est disponible.
NoncurrentVersionTransitionsnonUn tableau d'actions de lifecycle qui indique quand les versions d'objets non courantes doivent être transférées. Ces actions n'affectent pas les versions courantes. Elles n'assurent la transition que pour les versions qui ne sont pas courantes.
NoncurrentVersionTransitions.NoncurrentDaysnonIndique le nombre de jours avant qu'une version non courante soit éligible à la transition après être devenue non courante, c'est-à-dire l'âge minimum d'une version non courante.
NoncurrentVersionTransitions.NewerNoncurrentVersionsnonIndique le nombre de versions non courantes les plus récentes à conserver dans leur niveau de stockage actuel. Le maximum est de 100.

Exemples de configurations de transition

Objets de transition dans un bucket non versionné

La configuration suivante fait passer tous les objets ayant le préfixe « old » du niveau de stockage Haute performance au niveau de stockage Standard (EXPRESS_ONEZONE à STANDARD) 30 jours après leur création.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "old/"
      },      
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD"
        }
      ]
     }
  ]
}
Transition d'objets dans un bucket versionné

La configuration suivante spécifie les actions suivantes :

  • La version courante de tous les objets sera transférée du niveau Haute performance au niveau Standard 30 jours après leur création.
  • Si les objets ont des versions non courantes, toutes les versions non courantes datant de plus de 5 jours seront transférées du niveau Haute performance au niveau Standard.

Dans ce scénario, supposons que vous téléversiez un objet comportant plusieurs versions :

  • v5 (current version, creation date 2024-10-23)
  • v4 (current version, creation date 2024-10-23)
  • v3 (current version, creation date 2024-10-22)
  • v2 (current version, creation date 2024-10-18)
  • v1 (current version, creation date 2024-10-17)

Si la date actuelle est 2024-10-23 :

  • v5 sera transférée 30 jours après le 2024-10-23
  • v1 sera transférée 30 jours après sa date de création (2024-10-17)
{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": { },      
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD"
        }
      ],
      "NoncurrentVersionTransitions": [
        {
          "NoncurrentDays": 30,
          "StorageClass": "STANDARD"
        }
       ]
     }
  ]
}
Combinaison d'expiration et de transition

La configuration du lifecycle suivante s'applique à tous les objets dont le préfixe est « old » et dont le tag « type » a pour valeur « logs ». Elle spécifie les actions suivantes :

  • 30 jours après leur création, les objets seront transférés du niveau High Performance au niveau Standard.
  • 90 jours après leur création, les objets seront supprimés.

Dans ce scénario, les objets seront stockés dans le niveau haute performance pendant 30 jours, puis 60 jours dans le niveau standard avant d'être définitivement supprimés.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "And": {
            "Prefix": "old/",
            "Tag": {
              "Key": "type",
              "Value": "logs"
            }
        }
      },
      "Expiration": {
        "Days": 90,
      },      
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD"
        }
      ]
    }
  ]
}
Combinaison de règles d'expiration et de transition avec des règles contradictoires

La configuration suivante du lifecycle est téléversée dans un bucket non versionné. Elle définit deux règles qui s'appliquent à tous les objets ayant le préfixe « old » et le tag « type » avec la valeur « logs » :

  • 90 jours après leur création, les objets seront expirés.
  • 90 jours après leur création, les objets seront transitionnés.

Dans ce scénario, deux règles imposent à OVHcloud Object Storage d'effectuer simultanément deux actions différentes sur le même ensemble d'objets. La suppression permanente étant prioritaire sur la transition, les objets sont supprimés au bout de 90 jours et il n'y a plus d'intérêt à changer de classe de stockage.

{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "And":{
            "Prefix": "old/",
            "Tag": {
              "Key": "type",
              "Value": "logs"
            }
        }
      },
      "Expiration": {
        "Days": 90,
      }
    },
    {
      "ID": "456789",
      "Status": "Enabled",
      "Filter": {
        "And":{
            "Prefix": "old/",
            "Tag": {
              "Key": "type",
              "Value": "logs"
            }
        }
      },
      "Transitions": [
        {
          "Days": 90,
          "StorageClass": "STANDARD"
        }
      ]
    }
  ]
}

En pratique

Via le CLI

Comme prérequis, vous devez avoir un bucket contenant des données sur lesquelles vous voulez appliquer la configuration du lifecycle et avoir les permissions nécessaires (par défaut le propriétaire du bucket ou la permission s3:putLifecycleConfiguration donnée via une politique d'accès utilisateur) pour le faire.

Créez un fichier de configuration de lifecycle à l'aide de votre éditeur préféré.

Exemple : Expirer les objets avec un préfixe spécifique dans un bucket versionné.

La configuration suivante effectue les actions suivantes :

  • après 45 jours, elle expire automatiquement tous les objets avec le préfixe « old/ » en créant des marqueurs de suppression pour chacune des versions courantes de l'objet : la version courante devient non courante et le marqueur de suppression devient la version courante.
  • toutes les versions non courantes datant de plus de 15 jours des objets sélectionnés sont ensuite supprimées, à l'exception des 3 versions non courantes les plus récentes. S'il y a moins de 3 versions non courantes, l'action NoncurrentVersionExpiration ne sera pas appliquée.
cat lifecycle.json
{
  "Rules": [
    {
      "ID": "123456",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "old/"
      },
      "Expiration": {
        "Days": 45
      },
      "NoncurrentVersionExpiration": {
        "NoncurrentDays": 15,
        "NewerNoncurrentVersions": 3
      }
    }
  ]
}

Transférez le fichier dans le bucket :

aws s3api put-bucket-lifecycle-configuration --bucket my-bucket --lifecycle-configuration file://lifecycle.json

Via l'espace client OVHcloud (à venir)

FAQ

Pourquoi mes objets n'ont-ils pas encore expiré alors que j'ai mis en place des règles de cycle de vie ?

Les règles de cycle de vie sont traitées de manière asynchrone et dans la mesure du possible. La plupart des règles sont appliquées dans les 24 heures, mais cela peut prendre plus de temps dans le cas d'un très grand nombre d'objets. Pendant ce délai, vous continuez à être facturé pour la classe de stockage actuelle de l'objet, même si la règle (par exemple, l'expiration ou la transition) a déjà été déclenchée mais n'est pas encore terminée.

Pourquoi le nombre d'objets de mon bucket versionné continue-t-il d'augmenter alors que j'ai mis en place des règles de cycle de vie ?

Lorsqu'une opération de suppression (expiration) d'un objet est effectuée dans un bucket versionné, l'objet n'est pas directement supprimé. Un marqueur de suppression est créé sur l'objet. Ce marqueur de suppression devient la version la plus récente de l'objet avec un nouvel identifiant de version, ce qui augmente le nombre d'objets dans le bucket.

Une configuration supplémentaire est nécessaire pour supprimer définitivement les objets, y compris les téléversements en plusieurs parties (multipart uploads) incomplets, les marqueurs de suppression expirés et les versions antérieures des objets.

Comment vider mon bucket S31 à l'aide des règles de cycle de vie ?

Pour vider un bucket S3, vous devez prendre en compte les éléments suivants :

  • expirer les versions actuelles des objets
  • supprimer les versions précédentes des objets
  • supprimer les marqueurs de suppression expirés
  • supprimer les multipart uploads incomplets

Comment puis-je contrôler les actions entreprises par mes règles de cycle de vie ?

Vous pouvez utiliser la fonctionnalité Server Access Logging pour surveiller les actions effectuées par vos règles de cycle de vie sur votre bucket S3. La journalisation des accès serveur fournit des journaux détaillés des requêtes effectuées sur un bucket, y compris les opérations d'expiration, les transitions d'objets vers une autre classe de stockage, etc.

Comment puis-je récupérer des objets supprimés par mes règles de cycle de vie ?

Le versioning est le seul moyen de récupérer des objets qui ont été expirés. Il doit être activé sur votre bucket avant que vous ne configuriez vos règles de cycle de vie. Cependant, les objets qui sont définitivement supprimés par les règles de cycle de vie ne peuvent pas être récupérés.

Comment exclure des préfixes de mes règles de cycle de vie ?

L'exclusion de préfixes n'est pas prise en charge.

J'ai mis en place des règles de réplication entre 2 buckets S3 : pourquoi les objets supprimés dans mon bucket source par mes règles de cycle de vie ne sont-ils pas supprimés dans le bucket de destination ?

Les opérations de suppression résultant de l'application des règles de cycle de vie ne sont pas répliquées. Voir la documentation sur la réplication asynchrone pour plus de détails sur ce qui est répliqué et ce qui ne l'est pas.

Aller plus loin

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.

Échangez avec notre communauté d'utilisateurs.

1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services de OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.

Articles associés