Pour permettre la récupération des objets supprimés ou remplacés, Cloud Storage propose la fonctionnalité de gestion des versions d'objets. Cette page décrit la fonctionnalité ainsi que les options disponibles lors de son utilisation.
La gestion des versions d'objets conserve une version d'objet archivée lorsque la version d'objet active est remplacée ou supprimée. L'activation de cette fonctionnalité augmente les coûts de stockage, qui peuvent cependant être partiellement atténués en configurant la gestion du cycle de vie des objets de sorte à supprimer les anciennes versions de ces objets.
Présentation
Activez la gestion des versions d'objets pour un bucket. Une fois la fonctionnalité activée :
Cloud Storage conserve une version d'objet archivée chaque fois que vous remplacez ou supprimez une version d'objet active, tant que vous ne spécifiez pas le numéro de génération de la version active.
Les versions archivées conservent le nom de l'objet, mais elles sont identifiées de manière unique par un numéro de génération.
Les versions archivées ne s'affichent que dans les requêtes qui appellent explicitement à inclure les versions d'objets.
Vous supprimez définitivement les versions des objets en incluant le numéro de génération dans la requête de suppression ou en configurant la gestion du cycle de vie des objets.
Les versions archivées des objets existent indépendamment des versions actives.
Vous pouvez activer ou désactiver à tout moment la gestion des versions pour un bucket. Si vous la désactivez, les versions existantes des objets sont conservées et le bucket cesse d'accumuler de nouvelles versions d'objets archivées.
Détails relatifs à la gestion des versions d'objets
Cloud Storage utilise deux propriétés pour identifier la version d'un objet. L'une d'elles identifie la version des données de l'objet, l'autre identifie la version des métadonnées de l'objet. Ces propriétés sont toujours présentes avec chaque version de l'objet, même si la fonctionnalité de gestion des versions d'objets n'est pas activée. Elles peuvent être utilisées comme conditions préalables pour les mises à jour conditionnelles afin de faire respecter le classement des mises à jour.
Cloud Storage marque chaque objet à l'aide des propriétés suivantes :
Propriété | Description |
---|---|
generation |
Identifie la génération de contenu (données) et se met à jour lorsque le contenu d'un objet est remplacé. Il n'y a pas de lien entre les numéros de génération d'objets non liés, même si ceux-ci se trouvent dans le même bucket. |
metageneration |
Identifie la génération de métadonnées et augmente chaque fois que les métadonnées d'une génération de contenu donnée sont mises à jour. La propriété metageneration est réinitialisée à 1 pour chaque nouvelle génération (generation ) d'objet. La propriété metageneration n'a aucun sens sans la propriété generation . Elles doivent toujours être utilisées ensemble. En d'autres termes, il est sans intérêt de comparer la génération de métadonnées de deux versions si leurs générations de données sont différentes. |
La gestion des versions d'objets ne peut pas être activée sur un bucket qui possède actuellement une règle de conservation.
Métadonnées d'objet archivé
Les versions d'objets archivées ont leurs propres métadonnées, qui peuvent différer de celles des versions actives. Plus important encore, une version archivée conserve ses LCA et ne dispose pas nécessairement des mêmes autorisations que la version active.
Chaque version, qu'il s'agisse de l'objet actif ou archivé, possède un ensemble de métadonnées. Seul le dernier numéro de métagénération fait référence à des métadonnées. Les numéros plus anciens ne peuvent pas être utilisés pour accéder à des métadonnées qui ont été modifiées depuis.
Vous pouvez mettre à jour les métadonnées d'un objet archivé en spécifiant sa propriété generation
dans votre requête. Pour garantir une sémantique sécurisée de lecture-modification-écriture, vous pouvez utiliser une condition préalable de correspondance de métagénération. L'utilisation de cette condition préalable entraîne l'échec de la mise à jour si les métadonnées que vous tentez de mettre à jour ont été modifiées entre le moment où vous les avez lues et l'envoi de la mise à jour.
Exemple de gestion des versions d'objets
Cet exemple montre ce qu'il advient du fichier cat.jpg
dans un bucket sur lequel la fonctionnalité de gestion des versions d'objets est activée lorsque vous remplacez, mettez à jour et supprimez le fichier.
- Téléchargez une nouvelle image
Lorsque vous importez le fichier
cat.jpg
pour la première fois dans Cloud Storage, il se voit attribuer un numéro degeneration
et un numéro demetageneration
. Dans cet exemple, le numéro de génération est1360887697105000
. Comme l'objet est nouveau, le numéro demetageneration
est1
.Le fichier
cat.jpg
reçoit les numéros degeneration
et demetageneration
même si la gestion des versions d'objets n'est pas activée. Vous pouvez afficher ces numéros à l'aide de la commandestat
dans gsutil. Pour savoir comment procéder, consultez la section Afficher des métadonnées d'objets.- Activez la gestion des versions d'objets
À ce stade, vous décidez d'activer la gestion des versions d'objets pour votre bucket. Cela n'a pas d'incidence sur les numéros de
generation
ou demetageneration
du fichiercat.jpg
.- Modifiez les métadonnées de l'image
Mettez à jour les métadonnées du fichier
cat.jpg
en ajoutant des métadonnées personnalisées :color:black
. La mise à jour des métadonnées provoque une augmentation de la valeurmetageneration
du fichiercat.jpg
. Dans le cas présent, cette valeur passe de1
à2
. Cependant, l'objet lui-même demeure inchangé. Cloud Storage continue donc à ne stocker qu'une seule version du fichiercat.jpg
, et le numéro degeneration
de la version reste défini sur1360887697105000
.- Transférez une nouvelle version de l'image
Importez une nouvelle version du fichier
cat.jpg
dans votre bucket Cloud Storage. La gestion des versions d'objets va ainsi faire passer l'objetcat.jpg
existant à un état archivé. La version archivée conserve la même classe de stockage et les mêmes métadonnées qu'auparavant. La version archivée ne s'affiche que si vous demandez une liste avec versions gérées. Elle n'apparaît pas dans les commandes de listes normales. La version archivée est désormais référencée comme suit :cat.jpg#1360887697105000
.Dans le même temps, le fichier
cat.jpg
que vous venez d'importer devient la version active de l'objet. Ce nouveau fichiercat.jpg
obtient son propre numéro degeneration
, dans le présent exemple :1360887759327000
. Il obtient également ses propres métadonnées et un numéro demetageneration
d'une valeur de1
, ce qui signifie qu'il ne contient pas la métadonnéecolor:black
, sauf si vous la lui spécifiez. Il s'agit de la version utilisée lorsque vous accédez au fichiercat.jpg,
, ou lorsque vous le modifiez. Vous pouvez également faire référence à cette version decat.jpg
à l'aide de son numéro degeneration
. Par exemple, si vous utilisez l'outil gsutil, vous ferez référence au fichier avec le numérocat.jpg#1360887759327000
.- Supprimez la version active de l'image
Vous souhaitez à présent supprimer le fichier
cat.jpg
. La version portant le numéro de génération1360887759327000
est alors archivée. Votre bucket contient maintenant deux versions archivées du fichiercat.jpg
et aucune version active. Vous pouvez toujours faire référence à l'une des versions archivées en utilisant son numéro degeneration
, mais si vous essayez d'accéder au fichiercat.jpg
sans numéro degeneration
, votre requête échoue.De même, une liste d'objets normale du bucket ne présentera pas le fichier
cat.jpg
comme l'un des objets du bucket. Pour découvrir comment répertorier les versions d'objets archivées, consultez la section Répertorier les versions d'objets archivées.- Désactivez la gestion des versions d'objets
La désactivation de la gestion des versions d'objets a pour but d'empêcher l'archivage des objets. Les versions archivées existantes des objets sont conservées dans Cloud Storage. Même si la gestion des versions d'objets est désactivée, les versions
cat.jpg#1360887697105000
etcat.jpg#1360887759327000
restent stockées dans votre bucket jusqu'à ce que vous les supprimiez, soit manuellement, soit via la gestion du cycle de vie des objets.- Vous pouvez restaurer l'une des versions archivées.
Même si la gestion des versions d'objets est désactivée, vous pouvez restaurer l'une des versions archivées existantes en effectuant une copie de celle-ci. Pour ce faire, il vous suffit de nommer la copie
cat.jpg
. Une fois cette opération effectuée, votre bucket dispose de trois versions decat.jpg
: les deux versions archivées et la version active issue de la copie.
Tableau de référence de la gestion des versions d'objets
Ce tableau de référence indique ce qui se produit lorsque vous effectuez certaines actions de gestion des versions d'objets.
État de la gestion des versions d'objets | Action | Résultat |
---|---|---|
Désactivé | ||
Remplacez dog.png par une nouvelle version. |
La nouvelle version remplace la version active et reçoit un nouveau numéro de génération. L'ancienne version active est définitivement supprimée. | |
Remplacer une version archivée dog.png par une version active1 |
Une copie de la version archivée remplace la version active et reçoit un nouveau numéro de génération. L'ancienne version active est définitivement supprimée. | |
Supprimer dog.png |
dog.png est définitivement supprimé. |
|
Supprimer une version archivée de dog.png en spécifiant son numéro de génération1 |
La version archivée est définitivement supprimée. | |
Activé | ||
Remplacez dog.png par une nouvelle version. |
La nouvelle version remplace la version active et reçoit un nouveau numéro de génération. L'ancienne version active est archivée et conserve le même numéro de génération. | |
Remplacer une version archivée de dog.png par une version active |
Une copie de la version archivée remplace la version active et reçoit un nouveau numéro de génération. L'ancienne version active est archivée et conserve le même numéro de génération. | |
Supprimer la version active de dog.png sans spécifier son numéro de génération |
La version active est archivée et conserve le même numéro de génération. | |
Supprimer la version active de dog.png en spécifiant son numéro de génération |
La version active est définitivement supprimée. | |
Supprimer une version archivée de dog.png en spécifiant son numéro de génération |
La version archivée est définitivement supprimée. |
1 Une version archivée peut exister si la gestion des versions d'objets a été activée pour ce bucket.
Astuces
Cette section présente des astuces pour vous aider à utiliser plus efficacement la fonctionnalité de gestion des versions d'objets.
Utiliser gsutil
- L'outil gsutil offre une compatibilité complète avec les versions d'objets, ce qui facilite les tâches impliquant la fonctionnalité de gestion des versions d'objets. Par exemple, vous pouvez utiliser des versions archivées d'objets en ajoutant
#
ainsi que le numéro degeneration
au nom de l'objet. Pour plus d'informations sur l'utilisation de gsutil avec cette fonctionnalité, consultez la page Gestion des versions des objets et contrôle de simultanéité.
Eviter les ETag
- Pensez à utiliser les numéros de
generation
et demetageneration
pour les mises à jour conditionnelles plutôt que des ETag. La paire que constituent les numéros degeneration
et demetageneration
permet de garder une trace de toutes les mises à jour d'objets, y compris les modifications de métadonnées, fournissant ainsi une garantie plus solide que celle des ETag.
Comprendre le comportement de restauration de fichiers
Vous pouvez copier une version d'objet archivée dans la version active actuelle. Reportez-vous à la section Copier des versions d'objets archivées pour obtenir des instructions détaillées sur cette fonctionnalité.
Lorsque vous effectuez cette opération avec la gestion des versions d'objets activée, s'il existe déjà une version active de l'objet dans votre bucket, Cloud Storage la remplace, mais la conserve également en tant que nouvelle version archivée. Dans ce cas, votre bucket contient l'objet remplacé (à présent archivé) et deux copies de l'objet précédemment archivé (une copie active et une copie déjà archivée), toutes ces versions entraînant des frais de stockage. Pour éviter des frais inutiles, supprimez la version archivée que vous venez d'utiliser pour créer la copie active.
Utiliser les conditions préalables de correspondance de génération lors de la mutation de versions actives d'objets
Lorsque vous utilisez des numéros de génération, une demande aboutit tant qu'un objet portant ce nom et ce numéro de génération existe, qu'il soit actif ou archivé. Si aucun objet de ce type n'existe, Cloud Storage affiche l'erreur
404 Not Found
.Lorsque vous utilisez des conditions préalables de correspondance de génération, une demande aboutit uniquement si la version active de l'objet demandé possède le numéro de génération spécifié. Si aucun objet de ce type n'existe, ou s'il est archivé, Cloud Storage affiche l'erreur
412 Precondition Failed
.Vous devez éviter d'utiliser une condition préalable de correspondance de génération en même temps qu'un numéro de génération dans le nom de l'objet. Si vous utilisez les deux et que les numéros correspondent, l'utilisation de la condition préalable est redondante. Si les numéros ne correspondent pas, la requête va forcément échouer.
Si vous effectuez plusieurs requêtes de mutation simultanées avec une condition préalable de correspondance de génération, la cohérence forte de Cloud Storage ne permet la réussite que d'une seule requête. Cette fonctionnalité est utile si vos objets sont mis à jour à partir de plusieurs sources et que vous devez vous assurer que les utilisateurs ne les remplacent pas accidentellement.
Si vous définissez une condition préalable de correspondance de génération sur
0
lors de l'importation d'un objet, Cloud Storage n'exécute la requête spécifiée que s'il n'existe pas de version active de l'objet. Par exemple, si vous exécutez une requêtePUT
avec l'API XML pour créer un objet comportant l'en-têtex-goog-if-generation-match:0
, la requête aboutit si l'objet n'existe pas ou s'il n'existe que des versions archivées de cet objet. S'il existe une version active de l'objet, Cloud Storage annule la mise à jour en affichant le code d'état412 Precondition Failed
.
Étape suivante
- Découvrez comment utiliser la gestion des versions d'objets.
- Découvrez la gestion du cycle de vie des objets, qui vous permet de gérer automatiquement les versions des objets.