Gérer des versions dans un Bucket
Last updated
Last updated
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.
Vous serez facturé pour l'espace utilisé par l'ensemble des versions d'un objet.
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 :
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"
}
aws s3api --endpoint-url=${S3_ENDPOINT} put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled --profile ${S3_PROFILE}
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}
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": {}
}
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"
}
]
}
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"
}
}
]
}
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"
}
}
]
}