本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在儲存貯體上啟用版本控制
您可以使用 Amazon S3 版本控制在單一儲存貯體中保留物件的多個版本。本節提供如何使用主控台、REST API、 AWS SDKs 和 AWS Command Line Interface () 在儲存貯體上啟用版本控制的範例AWS CLI。
您第一次在儲存貯體上啟用版本控制時,可能需要很短的時間來完全傳播變更。當此變更正在傳播時,您可能會在啟用版本控制之後建立或更新的物件請求遇到間歇性HTTP 404 NoSuchKey
錯誤。我們建議您在啟用版本控制之後等待 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 的身分和存取管理」。
下列各節提供使用主控台、 AWS CLI和 AWS SDKs 啟用 S3 版本控制的詳細資訊。
請依照下列步驟,使用 AWS Management Console 在 S3 儲存貯體上啟用版本控制。
啟用或停用 S3 儲存貯體的版本控制
登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/
-
在 Buckets (儲存貯體) 清單中,選擇要啟用版本控制的儲存貯體名稱。
-
選擇 Properties (屬性)。
-
在 Bucket Versioning (儲存貯體版本控制) 底下,選擇 Edit (編輯)。
-
選擇 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 刪除。
下列範例啟用 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,請參閱 AWS CLI 命令參考中的 put-bucket-versioning。
下列範例會在儲存貯體上啟用版本控制,然後使用 AWS SDK for Java 和 擷取版本控制狀態 AWS SDK for .NET。如需有關使用其他 AWS SDKs 的資訊,請參閱AWS 開發人員中心。
- .NET
-
如需有關設定和執行程式碼範例的資訊,請參閱 AWS SDK for .NET 中的 AWS SDK for .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
-
如需如何建立和測試工作範例的說明,請參閱 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