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

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

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

您可以使用 Amazon S3 版本控制在單一儲存貯體中保留物件的多個版本。本節提供如何使用主控台、REST API、 AWS SDK 和 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」。

以下各節提供有關使用主控台和 AWS SDK 啟用 S3 版本控制的詳細資訊。 AWS CLI

請按照下列步驟使用在 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。但是,您無法使用 AWS Management Console來啟用 MFA Delete。您必須使用 AWS Command Line Interface (AWS CLI) 或 API。如需詳細資訊,請參閱 設定 MFA Delete

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

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

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

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

使用 MFA Delete 需要已核准的實體或虛擬身分驗證裝置。如需在 Amazon S3 中使用 MFA Delete 的詳細資訊,請參閱「設定 MFA Delete」。

若要取得有關使用啟用版本化的更多資訊 AWS CLI,請參閱《指AWS CLI 令參考put-bucket-versioning中的〈

下列範例會啟用值區的版本控制,然後使用 AWS SDK for Java 和擷取版本控制狀態 AWS SDK for .NET。如需有關使用其他 AWS SDK 的詳細資訊,請參閱 AWS 開發人員中心

.NET

如需如何建立與測試工作範例的資訊,請參閱「執行 Amazon S3 .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

如需如何建立及測試工作範例的說明,請參閱「測試 Amazon S3 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

如需如何建立及測試工作範例的說明,請參閱「使用 AWS SDK for Python (Boto)」。

以下 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