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.
Wenn Sie die Versionsverwaltung für einen Bucket zum ersten Mal aktivieren, kann es einen Moment dauern, bis die Änderung vollständig verbreitet ist. Während der Änderung können bei Anforderungen an Objekte gelegentlich Fehler des Typs HTTP 404 NoSuchKey
auftreten, die erst nach Aktivierung der Versionsverwaltung erstellt oder aktualisiert wurden. Wir empfehlen, dass Sie nach dem Aktivieren der Versionsverwaltung 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 Beibehalten mehrerer Versionen von Objekten mit der S3-Versionsverwaltung. 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.
Weitere Informationen zur Verwendung von S3 Versioning zum Schutz von Daten finden Sie im Tutorial: Schutz von Daten in Amazon S3 vor versehentlichem Löschen oder Anwendungsfehlern mithilfe von S3 Versioning, S3 Object Lock und S3 Replication.
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 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 Identitäts- und Zugriffsverwaltung für 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
Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon-S3-Konsole unter https://console.aws.amazon.com/s3/.
-
Wählen Sie in der Liste Buckets den Namen des Buckets aus, für den Sie Versioning aktivieren möchten.
-
Wählen Sie Properties (Eigenschaften).
-
Wählen Sie unter Bucket Versioning (Bucket-Versioning) die Option Edit (Bearbeiten).
-
Wählen Sie Suspend (Anhalten) oder Enable (Aktivieren) und dann Save changes (Änderungen speichern).
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 amzn-s3-demo-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 amzn-s3-demo-bucket1
--versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SERIAL 123456
"
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
-
Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter Getting started with the AWS SDK for .NET (Erste Schritte mit dem AWS-SDK für .NET) im Entwicklerbuch für AWS-SDK für .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
-
Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Erste Schritte im AWS SDK for Java-Entwicklerhandbuch.
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
-
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