排查 Amazon S3 生命周期问题 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

排查 Amazon S3 生命周期问题

以下信息可以帮助您排查 Amazon S3 生命周期规则的常见问题。

我对我的桶运行了一个列表操作,看到了我认为已按生命周期规则过期或转换的对象。

S3 生命周期对象转换对象过期是异步操作。因此,在对象符合过期或转换条件的时间与它们实际转换或过期的时间之间可能会有延迟。一旦满足生命周期规则,即使操作尚未完成,也会立即应用账单更改。此行为的例外情况是,如果您有一个生命周期规则集转换为 S3 Intelligent-Tiering 存储类。在此类情况下,在对象转换为 S3 Intelligent-Tiering 存储类之前,账单不会发生更改。有关账单更改的更多信息,请参阅设置桶的生命周期配置

注意

Amazon S3 不会将小于 128KB 的对象从 S3 Standard 或 S3 Standard-IA 存储类转换为 S3 Intelligent-Tiering、S3 Standard-IA 或 S3 One Zone-IA 存储类。

如何监控生命周期规则的进度以验证其是否处于活动状态?

要查看任何活动的生命周期规则的进度(或监控这些规则所做的更改),请使用 Storage Lens 存储统计管理工具控制面板。通过此控制面板可以查看以下指标,这些指标监控对象计数或大小。

  • 当前版本字节数

  • 当前版本对象计数

  • 非当前版本字节数

  • 非当前版本对象计数

  • 删除标记对象计数

  • 删除标记存储字节数

  • 未完成的分段上传字节数

  • 未完成的分段上传对象计数

还可以使用以下功能来监控生命周期规则:

  • Amazon S3 清单 – 您可以使用 S3 清单为 Amazon S3 桶(CSV)、经过 Apache 优化的行列式(ORC)或 Apache Parquet 格式生成前缀或对象列表,以用于审计目的。根据您的使用案例,还可以使用 Amazon Athena 在标准 SQL 中查询 S3 清单。

  • S3 事件通知 – 您可以设置事件通知,以便收到任何生命周期过期或转换事件的通知。

  • S3 服务器访问日志 – 您可以为 S3 桶启用服务器访问日志,以捕获与生命周期相关的操作,例如对象转换到另一个存储类和对象过期。有关更多信息,请参阅生命周期和日志记录

即使在启用了版本控制的桶上设置了生命周期规则,我的 S3 对象计数仍增加。

当在启用版本控制的桶中将对象设置为过期时,不会从桶中完全删除该对象。而是创建删除标记作为对象的最新版本。删除标记仍算作对象。因此,如果创建的生命周期规则仅使当前版本过期,则 S3 桶中的对象计数实际上会增加而不是减少。

例如,假设一个包含 100 个对象的 S3 桶启用了版本控制,并且生命周期规则设置为在 7 天后使对象的当前版本过期。第七天之后,对象计数增加到 200,这是因为除了 100 个原始对象(现在是非当前版本)之外,还创建了 100 个删除标记。有关启用版本控制的桶的 S3 生命周期配置规则操作的更多信息,请参阅对于桶设置生命周期配置

要永久删除对象,请添加额外的生命周期配置以删除对象的先前版本、过期的删除标记和未完成的分段上传。有关如何创建新的生命周期规则的说明,请参阅对于桶设置生命周期配置

注意
  • Amazon S3 将对象的转换或过期日期舍入到第二天的世界标准时间午夜。有关更多信息,请参阅生命周期规则:基于对象的存在期限

  • 对于受对象锁定保护的 S3 对象,不会永久删除当前版本。而是向对象添加删除标记,使其成为非当前对象。非当前版本将被保留,并且不会永久过期。

如何使用生命周期规则清空 S3 桶?

S3 生命周期规则是清空包含数百万个对象的 S3 桶的有效工具。要从 S3 桶中删除大量对象,请确保使用以下四对生命周期规则:

  • 将对象的当前版本设为过期永久删除对象的先前版本

  • 删除过期的删除标记删除未完成的分段上传

有关如何创建生命周期配置规则的步骤,请参阅对于桶设置生命周期配置

注意

对于受对象锁定保护的 S3 对象,不会永久删除当前版本。而是向对象添加删除标记,使其成为非当前对象。非当前版本将被保留,并且不会永久过期。

在将对象转换到成本较低的存储类后,我的 Amazon S3 账单增加了。

将对象转换为成本较低的存储类后,您的账单可能会增加,原因有很多:

  • 小型对象的 S3 Glacier 开销费用

    对于每个转换为 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 的对象,与此存储更新关联的总开销为 40KB。作为 40KB 开销的一部分,8KB 用于存储元数据和对象的名称。此 8KB 按照 S3 Standard 费率收费。剩余的 32KB 用于编制索引和相关的元数据。这 32KB 按照 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 定价收费。

    因此,如果您要存储许多大小较小的对象,我们不建议使用生命周期转换。相反,为了减少任何开销费用,请考虑在将许多较小的对象存储到 Amazon S3 中之前,将它们聚合为数量较少的大型对象。有关成本注意事项的更多信息,请参阅转换为 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 存储类(对象存档)

  • 最低存储费用

    某些 S3 存储类有最短存储持续时间要求。在满足最短持续时间之前从这些类中删除、覆盖或转换的对象将按比例收取提前转换或删除费用。这些最短存储持续时间要求如下所示:

    • S3 Standard-IA 和 S3 One Zone-IA – 30 天

    • S3 Glacier Flexible Retrieval 和 S3 Glacier Instant Retrieval – 90 天

    • S3 Glacier Deep Archive – 180 天

    有关这些要求的更多信息,请参阅使用 S3 生命周期转换对象约束部分。有关一般 S3 定价信息,请参阅 Amazon S3 定价Amazon 定价计算器

  • 生命周期转换成本

    每次通过生命周期规则将对象转换到不同的存储类时,Amazon S3 都会将该转换视为一个转换请求。这些转换请求的成本未包含在这些存储类的成本中。如果计划转换大量对象,请在转换到较低层时考虑请求成本。有关更多信息,请参阅 Amazon S3 定价

我已经更新了我的桶策略,但我的 S3 对象仍会被过期的生命周期规则删除。

桶策略中的 Deny 语句不会阻止在生命周期规则中定义的对象过期。生命周期操作(例如转换或过期)不使用 S3 DeleteObject 操作。相反,S3 生命周期操作是使用内部 S3 端点执行的。(有关更多信息,请参阅生命周期和日志记录。)

要防止您的生命周期规则采取任何操作,您必须编辑、删除或禁用该规则

我能否恢复由 S3 生命周期规则过期的 S3 对象?

恢复由 S3 生命周期过期的对象的唯一方法是通过版本控制,版本控制必须在对象符合过期条件之前就位。您无法撤消由生命周期规则执行的过期操作。如果现有的 S3 生命周期规则永久删除了对象,则无法恢复这些对象。要对桶启用版本控制,请参阅在 S3 存储桶中使用版本控制

如果您已对桶应用了版本控制,并且对象的非当前版本仍然完好无损,则可以恢复过期对象的先前版本。有关 S3 生命周期规则操作的行为和版本控制状态的更多信息,请参阅描述生命周期操作的元素中的生命周期操作和桶版本控制状态表。

注意

如果 S3 桶受 Amazon BackupS3 复制保护,则您也可以使用这些功能来恢复过期的对象。