在儲存貯體上啟用版本控制 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在儲存貯體上啟用版本控制

您可以使用 Amazon S3 版本控制在單一儲存貯體中保留物件的多個版本。本節提供了如何使用控制台在值區上啟用版本控制的示例 RESTAPI, AWS SDKs,以及 AWS Command Line Interface (AWS CLI).

注意

如果您是第一次在值區上啟用版本控制,變更可能需要 15 分鐘才能完全傳播。建議您在啟用版本控制後等待 15 分鐘,然後再對值區中的物件發出寫入作業 (PUT或DELETE)。在此轉換完成之前發出的寫入作業可能會套用至未建立版本化的物件。

如需 S3 版本控制的詳細資訊,請參閱「在 S3 儲存貯體中使用版本控制」。如需有關使用已啟用版本控制儲存貯體中物件的資訊,請參閱使用已啟用版本控制之儲存貯體中的物件

若要進一步了解如何使用 S3 版本控制來保護資料,請參閱教學課程:使用 S3 版本控制、S3 物件鎖定和 S3 複寫,保護 Amazon S3 上的資料,以防意外刪除或發生應用程式錯誤

您建立的每個 S3 儲存貯體都會有相關聯的 versioning 子資源。(如需詳細資訊,請參閱「儲存貯體組態選項」。) 儲存貯體預設為未使用版本控制,versioning 子資源會存放空的版本控制組態,如下所示。

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

若要啟用版本控制,您可以使用包含狀態的版本控制組態,將要求傳送給 Amazon S3。

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

若要暫停版本控制,您必須將狀態值設為 Suspended

儲存貯體擁有者和所有已獲授權的使用者都可以啟用版本控制。桶的所有者是 AWS 帳戶 創建存儲桶(根帳戶)。如需許可的詳細資訊,請參閱「適用於 Amazon S3 的 Identity and Access Management」。

以下各節提供有關使用主控台啟用 S3 版本控制的詳細資訊: AWS CLI,以及 AWS SDKs.

請依照下列步驟使用 AWS Management Console 以在 S3 儲存貯體上啟用版本控制。

啟用或停用 S3 儲存貯體的版本控制
  1. 登入 AWS Management Console 並在打開 Amazon S3 控制台https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇要啟用版本控制的儲存貯體名稱。

  3. 選擇 Properties (屬性)。

  4. Bucket Versioning (儲存貯體版本控制) 底下,選擇 Edit (編輯)。

  5. 選擇 Suspend (暫停) 或 Enable (啟用),然後選擇 Save changes (儲存變更)。

注意

您可以使用... AWS 具有版本控制的多因素身份驗證(MFA)。當您使MFA用版本控制時,您必須提供您的 AWS 帳戶的存取金鑰和來自帳戶MFA裝置的有效代碼,用於永久刪除物件版本或暫停或重新啟用版本控制。

若要搭MFA配版本控制使用,請啟用MFA Delete。但是,您無法啟MFA Delete用使用 AWS Management Console。 您必須使用 AWS Command Line Interface (AWS CLI) 或API. 如需詳細資訊,請參閱配置MFA刪除

下列範例啟用 S3 儲存貯體上的版本控制。

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

下列範例會在儲存貯體上啟用 S3 版本控制和多因素驗證 (MFA) 刪除。

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

使用MFA刪除功能需要經過核准的實體或虛擬驗證裝置。如需在 Amazon S3 中使用MFA刪除的詳細資訊,請參閱配置MFA刪除

如需使用啟用版本控制的詳細資訊 AWS CLI,請參閱put-bucket-versioning中的 AWS CLI 指令參考

下列範例會啟用值區的版本控制,然後使用 AWS SDK for Java 和 AWS SDK for .NET。 有關使用其他的信息 AWS SDKs,請參閱 AWS 開發人員中心

.NET

如需有關設定和執行程式碼範例的詳細資訊,請參閱 AWS SDK對於. NETAWS SDK對於. NET開發人員指南

using System; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.rproxy.goskope.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

如需有關如何建立和測試工作範例的指示,請參閱《 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

以下 Python 程式碼範例會建立 Amazon S3 儲存貯體,使其能夠進行版本控制,並設定一個在 7 天後讓最新物件到期的生命週期。

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