对象生命周期管理

转到示例

为了支持常见使用场景(例如为对象设置存留时间 (TTL)、保留对象的非当前版本或“降级”对象的存储类别以帮助管理费用),Cloud Storage 提供了对象生命周期管理功能。

本页面介绍了此功能,以及使用此功能时可用的选项。如需了解生命周期配置文件的通用格式,请参阅适用于 JSON 的存储分区资源表示法适用于 XML 的生命周期配置格式

简介

您可以将生命周期管理配置分配给存储分区。该配置包含一组适用于存储分区中的当前和未来对象的规则。当对象满足其中一个规则的条件时,Cloud Storage 会自动对该对象执行指定的操作。以下是一些示例使用场景:

  • 将超过 365 天的对象的存储类别降级为 Coldline 存储空间。
  • 删除 2013 年 1 月 1 日之前创建的对象。
  • 在启用版本控制的存储分区中仅保留每个对象的 3 个最新版本。

生命周期配置

每个生命周期管理配置都包含一组规则。 定义规则时,您可以为任何操作指定任意一组条件。 如果在规则中指定多个条件,则对象必须匹配适用于要采取的操作的所有条件。如果指定包含相同操作的多个规则,则在对象与任何规则中的条件匹配时执行操作。每条规则只应包含一个操作。

如果多个规则同时满足单个对象的条件,则 Cloud Storage 将基于以下考虑,仅执行与其中一个规则关联的操作:

  • Delete 操作优先于任何 SetStorageClass 操作。
  • 将对象切换至具有最低静态存储价格的存储类别的 SetStorageClass 操作优先。

在操作发生后,系统会重新评估对象,然后再执行其他任何操作。

例如,如果您具有一个删除对象的规则和另一个更改对象存储类别的规则,但两个规则都使用完全相同的条件,则在满足条件时始终会执行删除操作。如果您的一条规则会将对象的类别更改为“Nearline 存储空间”,而另一条规则会将对象的类别更改为“Coldline 存储空间”,但两条规则都使用完全相同的条件,则在满足条件时,对象的类别始终更改为“Coldline 存储空间”。

如需了解使用生命周期配置的示例,请参阅管理对象生命周期

生命周期操作

生命周期规则指定 Delete 操作或 SetStorageClass 操作。

Delete

当某对象满足生命周期规则中指定的所有条件时,Delete 操作会删除该对象。

例外情况:在启用了对象版本控制的存储分区中,如果删除对象的有效版本,则该版本会成为非当前版本,如果删除非当前版本,则系统会永久删除该版本。如需查看有关使用 Delete 操作以及对象版本控制的示例,请参阅用于删除对象的配置

SetStorageClass

当某个对象满足生命周期规则中指定的所有条件时,SetStorageClass 操作会更改该对象的存储类别

SetStorageClass 支持以下存储类别转换:

原始存储类别 新存储类别
Durable Reduced Availability (DRA) 存储空间 Nearline 存储空间
Coldline 存储空间
Archive 存储空间
Multi-Regional 存储空间/Regional 存储空间1
Standard 存储空间、Multi-Regional 存储空间或 Regional 存储空间 Nearline 存储空间
Coldline 存储空间
Archive 存储空间
Nearline 存储空间 Coldline 存储空间
Archive 存储空间
Coldline 存储空间 Archive 存储空间

1 对于单地区位置中的存储分区,新的存储类别不能为 Multi-Regional 存储空间。对于多地区位置或双地区位置中的存储分区,新的存储类别不能是 Regional 存储空间。

Cloud Storage 不会验证存储类别转换是否正确。这意味着您可以指定上表中未列出的存储类别转换,但该转换不会发生。您应验证您的生命周期规则是否使用列出的存储类别转换之一。

生命周期条件

生命周期规则包括对象必须满足哪些条件才能发生规则中定义的操作。生命周期规则支持以下条件:

所有条件都是可选的,但至少需要一个条件。如果尝试设置无效的生命周期配置(例如,使用不存在的操作或条件),您会收到 400 Bad request 错误响应,并且所有的现有生命周期配置仍会保留在原位。

Age

如果对象达到指定的存在时间(以天为单位),则满足 Age 条件。存在时间从对象的创建时间开始计算。例如,如果某个对象的创建时间是 2019/01/10 10:00 UTC 且 Age 条件为 10 天,则自 2019/01/20 10:00 UTC 起该对象即满足条件。即使对象在创建后的某个时间通过对象版本控制功能成为非当前版本,也是如此。

CreatedBefore

如果某个对象在指定日期 (UTC) 的午夜之前创建,则满足 CreatedBefore 条件。

CustomTimeBefore

如果对象的 Custom-Time 元数据的日期部分早于此条件中指定的日期,则满足 CustomTimeBefore 条件。此条件是使用日期格式 YYYY-MM-DD 设置的。如果对象未设置 Custom-Time 元数据,则不满足 CustomTimeBefore

DaysSinceCustomTime

如果在对象的 Custom-Time 元数据字段中指定的日期和时间后经过了指定的天数,则满足 DaysSinceCustomTime 条件。例如,如果对象的 Custom-Time2020-05-16T10:00:00ZDaysSinceCustomTime 条件为 10 天,则自 2020/05/26 10:00 UTC 起该对象即满足条件。

如果对象未设置 Custom-Time 元数据,则不满足 DaysSinceCustomTime

DaysSinceNoncurrentTime

DaysSinceNoncurrentTime 条件通常仅与对象版本控制结合使用。如果在对象成为非当前版本(因为当前版本被删除或替换)后经过了指定的天数,则满足该条件。例如,如果对象在 2020/07/08 15:00 UTC 成为非当前版本且 DaysSinceNoncurrentTime 条件为 10 天,则自 2020/07/18 15:00 UTC 起该对象即满足条件。

IsLive

IsLive 条件通常仅与对象版本控制结合使用。如果设置为 false,则对象的任何非当前版本均满足此条件。如果设置为 true,则对象的当前版本满足此条件。如果您不使用版本控制,则所有对象都会被视为活跃对象,并且在 IsLivetrue 时相匹配。

MatchesStorageClass

如果存储分区中的对象以指定的存储类别存储,则满足 MatchesStorageClass 条件。您可以为 MatchesStorageClass 使用以下值:STANDARDNEARLINECOLDLINEARCHIVEMULTI_REGIONALREGIONALDURABLE_REDUCED_AVAILABILITY

通常,如果您要对 Standard 存储空间对象使用 MatchesStorageClass 条件,则还应包括以下内容:

  • 如果存储分区位于一个地区位置,请在条件中包含 REGIONALDURABLE_REDUCED_AVAILABILITY

  • 如果存储分区位于多地区位置或双地区位置,请在条件中包含 MULTI_REGIONALDURABLE_REDUCED_AVAILABILITY

包含这些额外的类别可确保生命周期规则涵盖存储分区中可能设置为旧存储类别的旧对象。

NoncurrentTimeBefore

NoncurrentTimeBefore 条件通常仅与对象版本控制结合使用。如果对象在该条件中指定的日期之前成为非当前版本,则满足该条件。该条件是使用日期格式 YYYY-MM-DD 设置的。如果对象为当前版本,则不满足 NoncurrentTimeBefore

NumberOfNewerVersions

NumberOfNewerVersions 条件通常仅与对象版本控制结合使用。如果此条件的值设置为 N,则当至少存在 N 个比某对象版本更新的版本(包括当前版本)时,该对象版本满足条件。对于当前对象版本,比其更新的版本数量被视为 0。对于最新的非当前版本,比其更新的版本数量为 1(如果没有当前对象版本,则为 0),依此类推。

对象生命周期行为

  • Cloud Storage 会定期检查已配置对象生命周期管理的存储分区中的所有对象,并根据存储分区的规则执行所有适用的操作。Cloud Storage 以异步方式执行操作,因此在满足条件后,可能须等待一段时间才会执行操作。

    例如,对象满足删除条件时,系统可能不会立即删除该对象。因此,在系统对该对象执行生命周期操作之前,您仍将看到该对象。适用费用在对象存在的情况下仍然适用,但有一个例外:如果对象由于仅包含 Age 条件的规则将被执行 Delete 操作时,不会收取静态存储费用。

  • 对生命周期配置做出的更新可能需要最长 24 小时才能生效。这意味着,当您更改生命周期配置时,对象生命周期管理可能仍会根据旧配置执行操作(此情况最多维持 24 小时)。

    例如,如果将 Age 条件从 10 天更改为 20 天,则对象生命周期管理可能会由于旧配置的条件在之后最长 24 小时的时间里删除存在时间为 11 天的对象。

  • 对象生命周期的 Delete 操作在对象上设置了对象保全或尚未达到的保留政策时,不会对对象生效。对象具有保全或保留政策限制时发生的任何 Delete 操作都会在该限制不再适用于对象后进行。

  • 对象生命周期的 SetStorageClass 操作不受对象保全或保留政策的影响。

SetStorageClass 费用优势

手动更改对象的存储类别不同,对象生命周期管理在更改对象的存储类别时不会重写对象。这使得对象生命周期管理具有某些价格优势:

  • 即使对象最初设置为 Nearline 存储空间或 Coldline 存储空间,也不存在与存储类别更改相关联的检索费用或提前删除费用

  • 在原始存储类别设置的对象时长会计入适用于新存储类别的任何最短存储时长。

例如,假设您在上传对象时将对象存储类别设为“Nearline 存储空间”,20 天后,您的生命周期配置将对象的存储类别更改为“Coldline 存储空间”。此更改不会产生任何检索费用或提前删除费用。如果您在存储类别更改 60 天后删除对象,则系统仅产生 10 天的提前删除费用,因为 Coldline 存储空间的最短存储时长为 90 天,而对象总共存在了 80 天。

作为对比,假设您在上传对象时将对象存储类别设为“Nearline 存储空间”,20 天后,您使用重写命令更改对象的存储类别(仍然更改为“Coldline 存储空间”)。此更改会产生检索费用和 10 天提前删除费用。如果您在重写 60 天后删除对象,则系统会产生 30 天提前删除费用。

到期时间元数据

如果为具有 Age 条件(没有 matchesStorageClass 及其他条件)的存储分区指定 Delete 操作,则一些对象可能会带有到期时间元数据标记。对象的到期时间表示未来(或过去)的某个时间,从这一时间起,对象可以被生命周期管理功能删除。到期时间可能会随存储分区的生命周期配置或保留政策变化而发生改变。

请注意,缺少到期时间元数据并不一定意味着对象不会被删除,而是表示没有足够的信息来确定何时删除该对象或是否将删除该对象。例如,如果对象的创建时间是 2020/01/10 10:00 UTC 且 Age 条件设置为 10 天,则对象到期时间为 2020/01/20 10:00 UTC。但是,如果符合以下条件,则无法为对象使用到期时间:

  • Delete 规则中指定了其他条件,但 matchesStorageClass 除外。

  • 您使用的 matchesStorageClass 条件不包含对象的存储类别。

  • 该对象处于保全,因为 Cloud Storage 无法知道何时将移除保全。

即使未立即删除对象,我们也不会在对象到期时间后对您收取存储费用。您可以在删除对象之前继续访问该对象,并承担其他费用(请求、网络带宽)。如果无法为对象使用到期时间,对象将被收取存储费用(直到被删除为止)。

使用到期时间时,请注意以下事项:

  • 如果存储分区具有保留政策,则到期时间是对象生命周期管理 Age 条件的较晚时间以及对象满足保留政策指定的保留期限的时间。

  • 如果不同的生命周期管理规则导致存在多个适用于对象的到期时间(相互冲突),则系统会使用适用的最早到期时间。

用于跟踪生命周期操作的选项

如需跟踪 Cloud Storage 执行的生命周期管理操作,请使用以下选项之一:

  • 使用 Cloud Storage 使用情况日志。此功能会记录操作和执行操作的人员。日志条目 cs_user_agent 字段的值是 GCS Lifecycle Management 时,表示该操作是由 Cloud Storage 根据生命周期配置执行的。

  • 为您的存储分区启用适用于 Cloud Storage 的 Pub/Sub 通知。当发生指定的操作时,此功能会向您选择的 Pub/Sub 主题发送通知。请注意,此功能不会记录执行操作的人员。

后续步骤