Aktivieren des Versioning für Buckets - Amazon Simple Storage Service

Aktivieren des Versioning für Buckets

Sie können Amazon-S3-Versioning nutzen, um mehrere Versionen eines Objekts in einem Bucket aufzubewahren. Dieser Abschnitt enthält Beispiele, wie Sie das Versioning für einen Bucket mithilfe der Konsole, der REST-API, AWS-SDKs und AWS Command Line Interface (AWS CLI) aktivieren können.

Anmerkung

Wenn Sie das Versioning für einen Bucket zum ersten Mal aktivieren, kann es einen Moment dauern, bis die Änderung vollständig verbreitet ist. Wir empfehlen, dass Sie nach dem Aktivieren des Versioning 15 Minuten warten, bevor Sie Schreibvorgänge (PUT oder DELETE) für Objekte im Bucket ausführen.

Weitere Informationen über das S3-Versioning finden Sie unter Verwenden der Versioning in S3-Buckets. Informationen zum Arbeiten mit Objekten, die sich in einem versioning-fähigen Bucket befinden, finden Sie unter Arbeiten mit Objekten in einem versioning-fähigen Bucket.

Jedem von Ihnen erstellten S3-Bucket ist eine Versioning-Subressource zugeordnet. (Weitere Informationen finden Sie unter Optionen für die Bucket-Konfiguration.) Standardmäßig ist Ihr Bucket nicht versioning-fähig, und dementsprechend speichert die Versioning-Subressource eine leere Versioning-Konfiguration wie folgt.

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

Um das Versioning zu aktivieren, können Sie eine Anfrage an Amazon S3 mit einer Versionskonfiguration senden, die einen Status enthält.

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

Um das Versioning auszusetzen, setzen Sie den Statuswert auf Suspended.

Der Bucket-Eigentümer und alle autorisierten IAM-Benutzer können das Versioning aktivieren. Der Bucket-Eigentümer ist das AWS-Konto, das den Bucket erstellt hat (das Root-Konto). Weitere Informationen zu Berechtigungen finden Sie unter Identity and Access Management in Amazon S3.

In den folgenden Abschnitten finden Sie weitere Informationen zum Aktivieren des S3-Versioning mithilfe der Konsole, AWS CLI und AWS-SDKs.

Befolgen Sie diese Schritte, um die AWS Management Console zu verwenden, um das Versioning auf einem S3-Bucket zu aktivieren.

Aktivieren und Deaktivieren des Versionings für einen S3-Bucket

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon-S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie in der Liste Buckets den Namen des Buckets aus, für den Sie Versioning aktivieren möchten.

  3. Wählen Sie Properties (Eigenschaften).

  4. Wählen Sie unter Bucket Versioning (Bucket-Versioning) die Option Edit (Bearbeiten).

  5. Wählen Sie Suspend (Anhalten) oder Enable (Aktivieren) und dann Save changes (Änderungen speichern).

Anmerkung

Sie können die AWS-Multi-Faktor-Authentifizierung (MFA) mit Versioning verwenden. Wenn Sie MFA mit Versioning verwenden, müssen Sie die Zugriffsschlüssel Ihres AWS-Konto und einen gültigen Code vom MFA-Gerät des Kontos angeben, um eine Objektversion dauerhaft zu löschen oder die Versioning zu unterbrechen oder zu reaktivieren.

Um MFA mit Versioning zu verwenden, aktivieren Sie MFA Delete. Sie können jedoch MFA Delete nicht mit der AWS Management Console aktivieren. Sie müssen die AWS Command Line Interface (AWS CLI) oder die API verwenden. Weitere Informationen finden Sie unter Konfigurieren von MFA Delete.

Im folgenden Beispiel wird das Versioning auf einem S3-Bucket aktiviert.

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

Das folgende Beispiel ermöglicht das Löschen der S3-Versionsverwaltung und Multi-Faktor Authentifizierung (MFA) für einen Bucket.

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

Die Verwendung von MFA Delete erfordert ein genehmigtes physisches oder virtuelles Authentifizierungsgerät. Weitere Informationen zur Verwendung von MFA Delete in Amazon S3 finden Sie unter Konfigurieren von MFA Delete.

Weitere Informationen zum Aktivieren des Versioning mit der AWS CLI finden Sie unter put-bucket-versioning in der AWS CLI-Befehlsreferenz.

Die folgenden Beispiele ermöglichen das Versioning für einen Bucket und rufen dann den Versionsstatus mit dem AWS SDK for Java und dem AWS SDK for .NET ab. Informationen zur Verwendung anderer AWS-SDKs finden Sie im AWS-Entwicklerzentrum.

.NET

Weitere Informationen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für 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

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für 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

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Verwendung der AWS SDK for Python (Boto).

Das folgende Python-Beispiel erstellt einen Amazon-S3-Bucket, aktiviert ihn für das Versioning und konfiguriert einen Lebenszyklus, der nicht-aktuelle Objektversionen nach 7 Tagen ablaufen lässt.

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