

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

# S3 版本控制的運作方式
<a name="versioning-workflows"></a>

您可以使用 S3 版本控制將物件的多個版本保留在一個儲存貯體中，以便可以還原意外刪除或覆寫的物件。例如，如果您將 S3 版本控制套用至儲存貯體，則會發生下列變更：
+ 如果您刪除物件，而不是永久移除物件，Amazon S3 會插入刪除標記，這會變成目前物件版本。然後，您可以還原先前的版本。如需詳細資訊，請參閱[刪除啟用版本控制功能之儲存貯體中的物件](DeletingObjectVersions.md)。
+ 如果您覆寫物件，則 Amazon S3 會在儲存貯體中新增物件版本。先前的版本會保留在儲存貯體中，並成為非目前版本。您可以還原先前的版本。

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

您建立的每個 S3 儲存貯體都會有相關聯的 *versioning* 子資源。(如需詳細資訊，請參閱「[一般用途儲存貯體組態選項](UsingBucket.md#bucket-config-options-intro)」。) 儲存貯體預設為*未使用版本控制*，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 分鐘，然後再對儲存貯體中的物件發出寫入作業 (`PUT` 或 `DELETE`)。

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

如需使用 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或 REST API 啟用和停用 S3 版本控制的詳細資訊，請參閱 [在儲存貯體上啟用版本控制](manage-versioning-examples.md)。

**Topics**
+ [版本 ID](#version-ids)
+ [版本控制工作流程](#versioning-workflows-examples)

## 版本 ID
<a name="version-ids"></a>

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

![\[此圖表說明已啟用版本控制的儲存貯體，其具有兩個金鑰相同但版本 ID 不同的物件。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/versioning_Enabled.png)


無論是否啟用 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。



## 版本控制工作流程
<a name="versioning-workflows-examples"></a>

當您將物件 `PUT` 到已啟用版本控制的儲存貯體時，並不會覆寫非目前的版本。如下圖所示，當新版的 `photo.gif` `PUT` 到已包含同名物件的儲存貯體時，會發生下列行為：
+ 原始物件 (ID = 111111) 仍會留在儲存貯體中。
+ Amazon S3 會產生新的版本 ID (121212)，並將此較新版本的物件新增至儲存貯體。

![\[此圖表說明在您將物件 PUT 在已啟用版本控制的儲存貯體時，S3 版本控制如何運作。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled3.png)


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

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

![\[顯示刪除標記插入的圖例。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)


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

![\[圖中顯示對刪除標記的 GetObject 呼叫傳回 404 (找不到) 錯誤。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


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

如需詳細資訊，請參閱[從啟用版本控制的儲存貯體擷取物件版本](RetrievingObjectVersions.md)。

![\[此圖表說明在您 GET 已啟用版本控制之儲存貯體中的非目前版本時，S3 版本控制如何運作。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/versioning_GET_Versioned3.png)


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

![\[圖表顯示 DELETE versionId 如何永久刪除特定物件版本。\]](http://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


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

### 何時建立物件的新版本？
<a name="versioning-workflows-new-versions"></a>

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

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

**重要**  
當發現 Amazon S3 對啟用了 S3 版本控制之儲存貯體發出 `PUT` 或 `DELETE` 物件請求之後，接收 HTTP 503 (無法使用服務) 回應的數目明顯增加時，表示該儲存貯體中有一或多個物件可能擁有數百萬個版本。如需詳細資訊，請參閱 S3 版本控制區段中的 [針對版本控制進行疑難排解](troubleshooting-versioning.md)。