

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
<a name="manage-versioning-examples"></a>

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 expliquant comment activer le versionnement sur un bucket à l'aide de la console, de l'API REST et AWS Command Line Interface (AWS CLI). AWS SDKs 

**Note**  
Après avoir activé la gestion des versions sur un compartiment pour la première fois, la propagation complète de la modification dans le système S3 peut prendre jusqu’à 15 minutes. Pendant ce temps, les demandes `GET` d’objets créés ou mis à jour après l’activation de la gestion des versions peuvent entraîner des erreurs `HTTP 404 NoSuchKey`. Nous vous recommandons d’attendre 15 minutes après l’activation de la gestion des versions avant d’exécuter des opérations d’écriture (`PUT` ou `DELETE`) sur les objets du compartiment. Cette période d’attente permet d’éviter les problèmes potentiels liés à la visibilité des objets et au suivi de la gestion des versions.

Pour plus d’informations sur la gestion des versions S3, consultez [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md). Pour en savoir plus sur l’utilisation d’objets se trouvant dans un compartiment dont la gestion des versions est activée, consultez [Utiliser des objets dans un compartiment activé pour la gestion des versions](manage-objects-versioned-bucket.md).

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](https://aws.amazon.com/getting-started/hands-on/protect-data-on-amazon-s3/?ref=docs_gateway/amazons3/manage-versioning-examples.html).

Chaque compartiment S3 créé possède une sous-ressource de *gestion des versions* qui lui est associée. (Pour plus d’informations, consultez [Options de configuration des compartiments à usage général](UsingBucket.md#bucket-config-options-intro).) 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 celui Compte AWS qui a créé le bucket (le compte root). Pour en savoir plus sur les autorisations, consultez [Gestion des identités et des accès pour Amazon S3](security-iam.md).

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 du AWS SDKs.

## Utilisation de la console S3
<a name="enable-versioning"></a>

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

**Pour activer ou désactiver la gestion des versions dans un compartiment à usage général S3**

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le volet de navigation de gauche, choisissez **Compartiments à usage général**.

1. Dans la liste de compartiments, choisissez le nom du compartiment pour lequel vous souhaitez activer la gestion des versions.

1. Choisissez **Propriétés**.

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

1. Choisissez **Interrompre** ou **Activer**, puis **Enregistrer les modifications**.

**Note**  
Vous pouvez utiliser l'authentification AWS multifactorielle (MFA) avec le versionnement. Lorsque vous utilisez l'authentification MFA avec le contrôle de version, vous devez fournir vos clés Compte AWS d'accès et un code valide provenant du dispositif MFA du compte pour supprimer définitivement une version d'objet ou suspendre ou réactiver le contrôle de version.   
Pour utiliser l’authentification multifactorielle (MFA) avec la gestion des versions, vous activez `MFA Delete`. Vous ne pouvez pas activer `MFA Delete` à l’aide de la AWS Management Console. Vous devez utiliser le AWS Command Line Interface (AWS CLI) ou l'API. Pour de plus amples informations, veuillez consulter [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md).

## À l'aide du AWS CLI
<a name="manage-versioning-examples-cli"></a>

L’exemple suivant active la gestion des versions sur un compartiment à usage général S3. 

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

L’exemple suivant active la gestion des versions S3 et la fonction de suppression de l’authentification multifactorielle (MFA) sur un compartiment pour un dispositif MFA physique. Pour les dispositifs MFA physiques, dans le paramètre `--mfa`, transmettez une concaténation du numéro de série du dispositif MFA, d’un espace et de la valeur affichée sur votre dispositif d’authentification.

```
aws s3api put-bucket-versioning --bucket {{amzn-s3-demo-bucket1}} --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "{{SerialNumber 123456}}"
```

L’exemple suivant active la gestion des versions S3 et la fonction de suppression de l’authentification multifactorielle (MFA) sur un compartiment pour un dispositif MFA virtuel. Pour les dispositifs MFA virtuels, dans le paramètre `--mfa`, transmettez une concaténation de l’ARN du dispositif MFA, d’un espace et de la valeur affichée sur votre dispositif d’authentification.

```
aws s3api put-bucket-versioning --bucket {{amzn-s3-demo-bucket1}} --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::{{account-id}}:mfa/root-account-mfa-device {{123789}}"
```

**Note**  
L’utilisation de la fonction Supprimer MFA nécessite un périphérique d’authentification physique ou virtuel approuvé. Pour en savoir plus sur l’utilisation de la fonction Supprimer MFA dans Amazon S3, consultez [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md).

Pour plus d'informations sur l'activation de la gestion des versions à l'aide du AWS CLI, consultez [put-bucket-versioning](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-versioning.html)la *référence des AWS CLI commandes*.

## À l'aide du AWS SDKs
<a name="manage-versioning-examples-sdk"></a>

Les exemples suivants activent le contrôle de version sur un compartiment, puis récupèrent le statut de version à l'aide du AWS SDK pour Java et du. AWS SDK pour .NET Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/).

------
#### [ .NET ]

Pour plus d'informations sur la configuration et l'exécution des exemples de code, consultez [Getting Started with the AWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET dans *AWS le Guide du développeur du SDK pour* .NET. 

```
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 création et le test d'un échantillon fonctionnel, consultez [Getting Started](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) dans le guide du AWS SDK pour Java développeur.

```
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
```

------