

# 使用 S3 版本控制保留对象的多个版本
<a name="Versioning"></a>

Amazon S3 中的版本控制是在相同的存储桶中保留对象的多个变量的方法。对于存储桶中存储的每个对象，您可以使用 S3 版本控制功能来保留、检索和还原它们的各个版本。使用版本控制能够更加轻松地从用户意外操作和应用程序故障中恢复数据。为存储桶启用版本控制后，如果 Amazon S3 同时收到针对同一对象的多个写入请求，它会存储所有对象。

启用了版本控制的存储桶可以协助您恢复因意外删除或覆盖操作而失去的对象。例如，如果您删除对象，Amazon S3 会插入删除标记，而不是永久删除该对象。删除标记将成为当前对象版本。如果覆盖对象，则会导致存储桶中出现新的对象版本。您始终可以恢复以前的版本。有关更多信息，请参阅 [从启用了版本控制的存储桶中删除对象版本](DeletingObjectVersions.md)。

默认情况下，S3 版本控制在存储桶上处于禁用状态，您必须明确启用它。有关更多信息，请参阅 [在存储桶上启用版本控制](manage-versioning-examples.md)。

**注意**  
SOAP API 不支持 S3 版本控制。HTTP 上的 SOAP 支持已弃用，但是仍可在 HTTPS 上使用。SOAP 不支持新增的 Amazon S3 功能。
对于存储和传输的每个对象版本，都适用正常 Amazon S3 费率。对象的每个版本都是完整的对象；它并非只是与上一版本有所不同。因此，如果您存储了三个版本的对象，则会收取您三个对象的费用。

## 不受版本控制、启用了版本控制和已暂停版本控制的存储桶
<a name="versioning-states"></a>

存储桶可能处于以下三种状态之一：
+ 不受版本控制（默认）
+ 已启用版本控制
+ 已暂停版本控制

您可以在存储桶级别启用和暂停版本控制。一旦您对存储桶启用了版本控制，它将无法返回到不受版本控制状态。但是，您可以在该存储桶上*暂停*版本控制。

版本控制状态将应用到该存储桶中的所有（不是某些）对象。当您在存储桶中启用版本控制功能时，所有新对象都将受版本控制，并为其指定唯一的版本 ID。此后，在启用版本控制功能时，存储桶中已存在的对象将*始终*受版本控制，并在以后的请求修改时为其提供唯一的版本 ID。请注意以下几点：
+ 在您设置版本控制状态之前存储在存储桶中的对象的版本 ID 为 `null`。启用版本控制时，存储桶中的现有对象不会更改。更改的是 Amazon S3 在以后的请求中处理这些对象的方式。有关更多信息，请参阅 [使用启用版本控制的存储桶中的对象](manage-objects-versioned-bucket.md)。
+ 存储桶拥有者（或任何具有适当权限的用户）可以暂停版本控制以停止累积对象版本。暂停版本控制时，存储桶中的现有对象不会更改。更改的是 Amazon S3 在以后的请求中处理对象的方式。有关更多信息，请参阅 [使用已暂停版本控制的存储桶中的对象](VersionSuspendedBehavior.md)。

## 将 S3 版本控制与 S3 生命周期结合使用
<a name="versioning-lifecycle"></a>

要自定义您的数据保留方法和控制存储成本，请将对象版本控制与 S3 生命周期结合使用。有关更多信息，请参阅 [管理对象的生命周期](object-lifecycle-mgmt.md)。有关使用 Amazon Web Services 管理控制台、Amazon CLI、Amazon SDK 或 REST API 创建 S3 生命周期配置的信息，请参阅[在存储桶上设置 S3 生命周期配置](how-to-set-lifecycle-configuration-intro.md)。

**重要**  
如果您在不受版本控制的存储桶中具有对象到期生命周期配置，并且希望在启用版本控制时保持相同的永久删除行为，则必须添加非当前版本到期策略。非当前版本到期生命周期配置将管理在启用版本控制的存储桶中删除非当前对象版本的行为。（启用版本控制的存储桶会维护一个当前对象版本，以及零个或更多非当前对象版本。） 有关更多信息，请参阅 [在存储桶上设置 S3 生命周期配置](how-to-set-lifecycle-configuration-intro.md)。

有关使用 S3 版本控制的信息，请参阅以下主题。

**Topics**
+ [不受版本控制、启用了版本控制和已暂停版本控制的存储桶](#versioning-states)
+ [将 S3 版本控制与 S3 生命周期结合使用](#versioning-lifecycle)
+ [S3 版本控制的工作原理](versioning-workflows.md)
+ [在存储桶上启用版本控制](manage-versioning-examples.md)
+ [配置 MFA 删除](MultiFactorAuthenticationDelete.md)
+ [使用启用版本控制的存储桶中的对象](manage-objects-versioned-bucket.md)
+ [使用已暂停版本控制的存储桶中的对象](VersionSuspendedBehavior.md)
+ [版本控制故障排除](troubleshooting-versioning.md)