Abilitazione della funzione Controllo delle versioni sui bucket - Amazon Simple Storage Service

Abilitazione della funzione Controllo delle versioni sui bucket

È possibile utilizzare la funzione Controllo versioni S3 per mantenere più versioni di un oggetto in un bucket. In questa sezione sono forniti esempi su come attivare il controllo della funzione su un bucket utilizzando la console, REST API, gli SDK AWS e la AWS Command Line Interface (AWS CLI).

Nota

Se abiliti il controllo delle versioni su un bucket per la prima volta, potrebbe essere necessario un breve periodo di tempo per la propagazione completa della modifica. Consigliamo di attendere 15 minuti dopo aver abilitato il controllo delle versioni prima di eseguire operazioni di scrittura (PUT o DELETE) sugli oggetti nel bucket.

Per ulteriori informazioni sulla funzione Controllo versioni S3, consulta Utilizzo della funzione Controllo delle versioni nei bucket S3. Per informazioni sull'utilizzo di oggetti che si trovano in bucket con la funzione Controllo delle versioni abilitata, consulta Utilizzo di oggetti in un bucket che supporta la funzione Controllo delle versioni.

A ogni bucket S3 creato è associata una sottorisorsa per la funzione Controllo delle versioni. (Per ulteriori informazioni, consulta Opzioni di configurazione dei bucket.) Per impostazione predefinita, il bucket è senza versione, di conseguenza la sottorisorsa per la funzione Controllo delle versioni archivia una configurazione vuota della funzione Controllo delle versioni.

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

Per abilitare la funzione Controllo delle versioni, è possibile inviare una richiesta ad Amazon S3 con una configurazione della funzione che include lo stato.

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

Per sospendere la funzione Controllo delle versioni, si imposterà il valore dello stato su Suspended.

Il proprietario del bucket e tutti gli utenti IAM autorizzati possono abilitare la funzione Controllo delle versioni. Il proprietario del bucket è l'Account AWS che ha creato il bucket (l'account root). Per ulteriori informazioni sulle autorizzazioni, consultare Identity and Access Management in Amazon S3.

Nelle sezioni seguenti vengono forniti maggiori dettagli sull'abilitazione del controllo delle versioni S3 utilizzando la console, AWS CLI e gli SDK AWS.

Attieniti alla seguente procedura per utilizzare la AWS Management Console per abilitare il controllo delle versioni su un bucket S3.

Per abilitare o disabilitare la funzione Controllo delle versioni in un bucket S3
  1. Accedi alla AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Nell'elenco Bucket name (Nome bucket) scegliere il nome del bucket per il quale si desidera abilitare la funzione Controllo delle versioni.

  3. Scegliere Properties (Proprietà).

  4. In Bucket Versioning (Funzione Controllo delle versioni del bucket) scegliere Edit (Modifica).

  5. Scegliere Suspend (Sospendi) o Enable (Abilita), quindi scegliere Save changes (Salva modifiche).

Nota

Puoi utilizzare l'autenticazione a più fattori (Multi-Factor Authentication, MFA) AWS con il controllo delle versioni. Se utilizzi l'autenticazione MFA con il controllo delle versioni, è necessario fornire le chiavi di accesso del tuo Account AWS e un codice valido del dispositivo MFA dell'account per eliminare definitivamente una versione dell'oggetto o sospendere o riattivare il controllo delle versioni.

Per utilizzare l'autenticazione MFA con la funzione Controllo delle versioni, abilita MFA Delete. Non è possibile abilitare MFA Delete utilizzando la AWS Management Console. È necessario utilizzare la AWS Command Line Interface (AWS CLI) o l'API. Per ulteriori informazioni, consulta Configurazione dell'eliminazione di MFA.

L'esempio seguente abilita la funzione Controllo delle versioni su un bucket S3.

aws s3api put-bucket-versioning --bucket DOC-EXAMPLE-BUCKET1 --versioning-configuration Status=Enabled

L'esempio seguente abilita la funzione Controllo delle versioni S3 e l'eliminazione dell'autenticazione a più fattori (MFA) su un bucket.

aws s3api put-bucket-versioning --bucket DOC-EXAMPLE-BUCKET1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SERIAL 123456"
Nota

L'utilizzo dell'eliminazione di MFA richiede un dispositivo di autenticazione fisico o virtuale approvato. Per ulteriori informazioni sull'utilizzo dell'eliminazione di MFA in Amazon S3, consulta Configurazione dell'eliminazione di MFA.

Per ulteriori informazioni sull'abilitazione del controllo delle versioni utilizzando la AWS CLI, consulta put-bucket-versioning nel Riferimento ai comandi di AWS CLI.

Negli esempi seguenti viene abilitato il controllo delle versioni su un bucket e quindi ne viene recuperato lo stato utilizzando la AWS SDK for Java e la AWS SDK for .NET. Per informazioni sull'utilizzo di altri SDK AWS, consulta il Centro Developer di AWS.

.NET

Per informazioni su come creare e testare un esempio di utilizzo, consulta Esecuzione degli esempi di codice .NET di Amazon S3.

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

Per istruzioni su come creare e testare un esempio di utilizzo, consulta Test degli esempi di codice Java di Amazon S3.

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

Per istruzioni su come creare e testare un esempio di utilizzo, consulta Utilizzo di AWS SDK for Python (Boto).

Nel seguente codice Python di esempio viene creato un bucket Amazon S3, viene abilitato per il controllo delle versioni e viene configurato un ciclo di vita che fa scadere le versioni degli oggetti non simultanee dopo 7 giorni.

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