Activation de la gestion des versions sur les compartiments - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Activation de la gestion des versions sur les compartiments

Vous pouvez utiliser la gestion des versions Simple Storage Service (Amazon S3) pour conserver plusieurs versions d'un objet dans un même compartiment. Cette section fournit des exemples de la manière d'activer le versionnement sur un bucket à l'aide de la console, REST API AWS SDKs, et AWS Command Line Interface (AWS CLI).

Note

Si vous activez le versionnement sur un bucket pour la première fois, la propagation complète de la modification peut prendre jusqu'à 15 minutes. Nous vous recommandons d'attendre 15 minutes après avoir activé le versionnement avant de lancer des opérations d'écriture (PUTouDELETE) sur les objets du compartiment. Les opérations d'écriture effectuées avant la fin de cette conversion peuvent s'appliquer à des objets non versionnés.

Pour plus d’informations sur la gestion des versions S3, consultez Utilisation de la gestion des versions dans les compartiments S3. Pour en savoir plus sur l'utilisation d'objets se trouvant dans un compartiment dont la gestion des versions est activée, veuillez consulter Utiliser des objets dans un compartiment activé pour la gestion des versions.

Pour en savoir plus sur l'utilisation de la gestion des versions S3 pour protéger les données, consultez Tutoriel : protection des données sur Amazon S3 contre les suppressions accidentelles ou les bogues d'application à l'aide de l'archivage par versions S3, du verrouillage d'objets S3 et de la réplication S3.

Chaque compartiment S3 créé possède une sous-ressource de gestion des version qui lui est associée. (Pour plus d'informations, consultez Options de configuration des compartiments.) Par défaut, votre compartiment est non versionné, et la sous-ressource de la gestion des versions stocke une configuration de gestion des versions vide, comme suit :

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </VersioningConfiguration>

Pour activer la gestion des versions, vous pouvez envoyer une demande à Simple Storage Service (Amazon S3) avec une configuration de la gestion des versions qui inclut un statut.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>Enabled</Status> </VersioningConfiguration>

Pour désactiver la gestion des versions, vous configurez la valeur de l'état sur Suspended.

Le propriétaire du compartiment et tous les utilisateurs autorisés peuvent activer la gestion des versions. Le propriétaire du bucket est Compte AWS qui a créé le bucket (le compte root). Pour plus d’informations sur les autorisations, consultez Identity and Access Management pour Amazon S3.

Les sections suivantes fournissent plus de détails sur l'activation de la gestion des versions S3 à l'aide de la console, AWS CLI, et le AWS SDKs.

Procédez comme suit pour utiliser le AWS Management Console pour activer le versionnement sur un compartiment S3.

Pour activer ou désactiver la gestion des versions dans un compartiment S3
  1. Connectez-vous au AWS Management Console et ouvrez la console Amazon S3 à l'adresse https://console.aws.amazon.com/s3/.

  2. Dans la liste Buckets (Compartiments), choisissez le nom du compartiment pour lequel vous souhaitez activer la gestion des versions.

  3. Choisissez Propriétés.

  4. Sous Bucket Versioning (Gestion des versions de compartiment), choisissez Edit (Modifier).

  5. Choisissez Suspend (Interrompre) ou Enable (Activer), puis Save changes (Enregistrer les modifications).

Note

Vous pouvez utiliser … AWS authentification multifactorielle (MFA) avec gestion des versions. Lorsque vous utilisez MFA le versionnement, vous devez fournir votre Compte AWS des clés d'accès et un code valide provenant de l'MFAappareil du compte pour supprimer définitivement une version d'un objet ou suspendre ou réactiver le contrôle de version.

Pour l'utiliser MFA avec le versionnement, vous devez activerMFA Delete. Toutefois, vous ne pouvez pas MFA Delete l'activer à l'aide du AWS Management Console. Vous devez utiliser le AWS Command Line Interface (AWS CLI) ou leAPI. Pour de plus amples informations, veuillez consulter Configuration de la MFA suppression.

L'exemple suivant active la gestion des versions sur un compartiment S3.

aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled

L'exemple suivant active le versionnement S3 et la suppression par authentification multifactorielle (MFA) sur un compartiment.

aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SERIAL 123456"
Note

L'utilisation de la MFA suppression nécessite un dispositif d'authentification physique ou virtuel approuvé. Pour plus d'informations sur l'utilisation de la MFA suppression dans Amazon S3, consultezConfiguration de la MFA suppression.

Pour plus d'informations sur l'activation de la gestion des versions à l'aide du AWS CLI, voir put-bucket-versioningdans le AWS CLI Référence de commande.

Les exemples suivants activent le contrôle de version sur un compartiment, puis récupèrent l'état du versionnement à l'aide du AWS SDK for Java et le AWS SDK for .NET. Pour plus d'informations sur l'utilisation d'autres AWS SDKs, consultez le AWS Centre pour développeurs.

.NET

Pour plus d'informations sur la configuration et l'exécution des exemples de code, voir Getting Started with AWS SDKpour. NETdans le AWS SDKpour. NETGuide du développeur.

using System; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class BucketVersioningConfiguration { static string bucketName = "*** bucket name ***"; public static void Main(string[] args) { using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { try { EnableVersioningOnBucket(client); string bucketVersioningStatus = RetrieveBucketVersioningConfiguration(client); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when listing objects", amazonS3Exception.Message); } } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void EnableVersioningOnBucket(IAmazonS3 client) { PutBucketVersioningRequest request = new PutBucketVersioningRequest { BucketName = bucketName, VersioningConfig = new S3BucketVersioningConfig { Status = VersionStatus.Enabled } }; PutBucketVersioningResponse response = client.PutBucketVersioning(request); } static string RetrieveBucketVersioningConfiguration(IAmazonS3 client) { GetBucketVersioningRequest request = new GetBucketVersioningRequest { BucketName = bucketName }; GetBucketVersioningResponse response = client.GetBucketVersioning(request); return response.VersioningConfig.Status; } } }
Java

Pour obtenir des instructions sur la façon de créer et de tester un échantillon de travail, voir Getting Started dans AWS SDK for Java .

import java.io.IOException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; public class BucketVersioningConfigurationExample { public static String bucketName = "*** bucket name ***"; public static AmazonS3Client s3Client; public static void main(String[] args) throws IOException { s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.setRegion(Region.getRegion(Regions.US_EAST_1)); try { // 1. Enable versioning on the bucket. BucketVersioningConfiguration configuration = new BucketVersioningConfiguration().withStatus("Enabled"); SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest(bucketName,configuration); s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest); // 2. Get bucket versioning configuration information. BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName); System.out.println("bucket versioning configuration status: " + conf.getStatus()); } catch (AmazonS3Exception amazonS3Exception) { System.out.format("An Amazon S3 error occurred. Exception: %s", amazonS3Exception.toString()); } catch (Exception ex) { System.out.format("Exception: %s", ex.toString()); } } }
Python

L'exemple de code Python suivant crée un compartiment Amazon S3, l'active pour la gestion des versions, et configure un cycle de vie qui fait expirer les versions d'objet anciennes après 7 jours.

def create_versioned_bucket(bucket_name, prefix): """ Creates an Amazon S3 bucket, enables it for versioning, and configures a lifecycle that expires noncurrent object versions after 7 days. Adding a lifecycle configuration to a versioned bucket is a best practice. It helps prevent objects in the bucket from accumulating a large number of noncurrent versions, which can slow down request performance. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket_name: The name of the bucket to create. :param prefix: Identifies which objects are automatically expired under the configured lifecycle rules. :return: The newly created bucket. """ try: bucket = s3.create_bucket( Bucket=bucket_name, CreateBucketConfiguration={ "LocationConstraint": s3.meta.client.meta.region_name }, ) logger.info("Created bucket %s.", bucket.name) except ClientError as error: if error.response["Error"]["Code"] == "BucketAlreadyOwnedByYou": logger.warning("Bucket %s already exists! Using it.", bucket_name) bucket = s3.Bucket(bucket_name) else: logger.exception("Couldn't create bucket %s.", bucket_name) raise try: bucket.Versioning().enable() logger.info("Enabled versioning on bucket %s.", bucket.name) except ClientError: logger.exception("Couldn't enable versioning on bucket %s.", bucket.name) raise try: expiration = 7 bucket.LifecycleConfiguration().put( LifecycleConfiguration={ "Rules": [ { "Status": "Enabled", "Prefix": prefix, "NoncurrentVersionExpiration": {"NoncurrentDays": expiration}, } ] } ) logger.info( "Configured lifecycle to expire noncurrent versions after %s days " "on bucket %s.", expiration, bucket.name, ) except ClientError as error: logger.warning( "Couldn't configure lifecycle on bucket %s because %s. " "Continuing anyway.", bucket.name, error, ) return bucket