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

注意

您第一次在儲存貯體上啟用版本控制時,可能需要很短的時間來完全傳播變更。我們建議您在啟用版本控制之後等待 15 分鐘,然後再對儲存貯體中的物件發出寫入作業 (PUTDELETE)。

值區擁有者和所有授權 AWS Identity and Access Management (IAM) 使用者都可以啟用版本控制。值區擁有者是建立值區的擁有者。 AWS 帳戶 如需許可的詳細資訊,請參閱「適用於 Amazon S3 的 Identity and Access Management」。

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

版本 ID

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

說明啟用版本控制的值區的圖表,該值區具有兩個具有相同索引鍵但版本 ID 不同的物件。

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

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

只有 Amazon S3 會產生版本 ID,而且無法編輯它們。版本 ID 是 Unicode、UTF-8 編碼、可直接用為 URL,以及難解的字串,最長可達 1,024 個位元組。以下是範例:

3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

注意

為了簡單起見,本主題中的其他範例會使用較短的 ID。

版本控制工作流程

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

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

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

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

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

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

展示刪除標記插入的插圖。

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

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

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

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

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

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

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

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

何時建立物件的新版本?

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

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

重要

當發現 Amazon S3 對啟用了 S3 版本控制之儲存貯體發出 PUTDELETE 物件請求之後,接收 HTTP 503 (無法使用服務) 回應的數目明顯增加時,表示該儲存貯體中有一或多個物件可能擁有數百萬個版本。如需詳細資訊,請參閱 S3 版本控制區段中的 疑難排解