S3 版本控制的運作方式 - Amazon Simple Storage Service

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

S3 版本控制的運作方式

您可以使用 S3 版本控制將物件的多個版本保留在一個儲存貯體中,以便可以還原意外刪除或覆寫的物件。例如,如果您將 S3 版本控制套用至儲存貯體,則會發生下列變更:

  • 如果您刪除物件,而不是永久移除物件,Amazon S3 會插入刪除標記,這會變成目前物件版本。然後,您可以還原先前的版本。如需詳細資訊,請參閱刪除啟用版本控制功能之儲存貯體中的物件

  • 如果您覆寫物件,則 Amazon S3 會在儲存貯體中新增物件版本。先前的版本會保留在儲存貯體中,並成為非目前版本。您可以還原先前的版本。

注意

標準 Amazon S3 費率適用於所存放和傳送物件的每個版本。物件的每個版本都是整個物件,而不是與舊版本的差異。因此,如果您的所存放物件有三個版本,則會向您收取三個物件的費用。

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

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

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

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

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

注意

您第一次在儲存貯體上啟用版本控制時,可能需要很短的時間來完全傳播變更。當此變更正在傳播時,您可能會在啟用版本控制之後建立或更新的物件請求遇到間歇性HTTP 404 NoSuchKey錯誤。我們建議您在啟用版本控制之後等待 15 分鐘,然後再對儲存貯體中的物件發出寫入作業 (PUTDELETE)。

儲存貯體擁有者和所有 authorized AWS Identity and Access Management (IAM) 使用者可以啟用版本控制。儲存貯體擁有者是建立儲存貯體 AWS 帳戶 的 。如需許可的詳細資訊,請參閱「Amazon S3 的身分和存取管理」。

如需使用 AWS Management Console、 AWS Command Line Interface (AWS CLI) 或 REST 啟用和停用 S3 版本控制的詳細資訊API,請參閱 在儲存貯體上啟用版本控制

版本 IDs

如果您啟用儲存貯體的版本控制,Amazon S3 會自動為要存放的物件產生唯一的版本 ID。例如,在一個儲存貯體中,您可以有兩個具有相同金鑰 (物件名稱) 但不同版本的物件 IDs,例如 photo.gif(111111 版) 和 photo.gif(121212 版)。

描述已啟用版本控制的儲存貯體的圖表,該儲存貯體有兩個物件具有相同的金鑰,但具有不同的 IDs 版本。

無論是否啟用 S3 版本控制,每個物件都有版本 ID。若尚未啟用 S3 版本控制,則 Amazon S3 會將版本 ID 的值設定為 null。如果啟用了 S3 版本控制,Amazon S3 會為物件指派一個版本 ID 值。此值會將該物件與相同金鑰的其他版本區分開來。

當您啟用現有儲存貯體的 S3 版本控制時,已存放在儲存貯體上的物件會保持不變。其版本 IDs (null)、內容和許可保持不變。在啟用 S3 版本控制之後,新增至儲存貯體的每個物件都會取得版本 ID,這可將其與相同金鑰的其他版本區分開來。

只有 Amazon S3 會產生版本 IDs,而且無法編輯。版本 IDs 是 Unicode、UTF-8 編碼、URL 就緒、不透明的字串,長度不超過 1,024 個位元組。以下是範例:

3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

注意

為了簡化,本主題中的其他範例使用較短的 IDs。

版本控制工作流程

當您將物件 PUT 到已啟用版本控制的儲存貯體時,並不會覆寫非目前的版本。如下圖所示,當新版的 photo.gif PUT 到已包含同名物件的儲存貯體時,會發生下列行為:

  • 原始物件 (ID = 111111) 仍會留在儲存貯體中。

  • Amazon S3 會產生新的版本 ID (121212),並將此較新版本的物件新增至儲存貯體。

此圖表說明在您將物件 PUT 在已啟用版本控制的儲存貯體時,S3 版本控制如何運作。

使用此功能時,如果物件遭到意外覆寫或刪除,您可以擷取物件的先前版本。

當您 DELETE 物件時,所有版本都會保留在儲存貯體中,且 Amazon S3 會插入刪除標記,如下圖所示。

顯示刪除標記插入的圖解。

刪除標記會成為物件的目前版本。根據預設,GET 要求會擷取最近存放的版本。當目前版本為刪除標記時執行 GET Object 請求,會傳回 404 Not Found 錯誤,如下圖所示。

顯示傳回 404 (找不到) 錯誤的刪除標記 a GetObject 呼叫的圖解。

但您可以藉由指定物件的版本 ID,來 GET 非目前版本的物件。在下圖中,您將 GET 特定的物件版本:111111。即使該物件版本並非目前的版本,Amazon S3 也會傳回該物件版本。

如需詳細資訊,請參閱從啟用版本控制的儲存貯體擷取物件版本

此圖表說明在您 GET 已啟用版本控制之儲存貯體中的非目前版本時,S3 版本控制如何運作。

您可以指定要刪除的版本,來永久刪除物件。只有 Amazon S3 儲存貯體或授權的 IAM 使用者才能永久刪除版本。如果您的 DELETE 操作指定 versionId,則會永久刪除該物件版本,且 Amazon S3 不會插入刪除標記。

圖表顯示如何DELETE versionId永久刪除特定物件版本。

您可以設定儲存貯體以啟用多重要素驗證 (MFA) 刪除,藉此新增更多安全性。當您為儲存貯體啟用 MFA 刪除時,儲存貯體擁有者必須在刪除版本或變更儲存貯體版本控制狀態的任何請求中包含兩種形式的身分驗證。如需詳細資訊,請參閱設定 MFA 刪除

何時建立物件的新版本?

只有在 PUT 新物件時才會建立物件的新版本。請注意,某些動作 (例如 CopyObject) 透過實作 PUT 操作來運作。

執行修改目前物件的某些動作不會建立新版本,因為它們不會 PUT 新物件。這包含變更物件上的標籤等動作。

重要

如果您注意到 Amazon S3 收到的 HTTP 503 (Service Unavailable) 回應數量或對已啟用 S3 版本控制的儲存貯體提出PUTDELETE物件請求大幅增加,則儲存貯體中可能會有一或多個物件,其中有數百萬個版本。如需詳細資訊,請參閱 S3 版本控制區段中的 版本控制疑難排解