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
Obtenir l'état actuel du versionnage d'un Bucket
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}
{
"Status": "Enabled"
}
Pour un Bucket avec versionnage suspendu :
aws s3api --endpoint-url=${S3_ENDPOINT} get-bucket-versioning --bucket my-bucket --profile ${S3_PROFILE}
{
"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
{
"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
{
"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
{
"DeleteMarker": true,
"VersionId": "1666428023859"
}
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
{
"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
{
"DeleteMarker": true,
"VersionId": "1666428023859"
}
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
{
"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
{
"VersionId": "1666427487088"
}
aws --profile=${PROFILE} --endpoint ${S3_ENDPOINT} s3api list-object-versions --bucket my-bucket --prefix feather.ttf
{
"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"
}
}
]
}
Last updated