为了支持常见使用场景(例如为对象设置存留时间 (TTL)、保留对象的非当前版本或“降级”对象的存储类别以帮助管理费用),Cloud Storage 提供了对象生命周期管理功能。
本页面介绍了此功能,以及使用此功能时可用的选项。如需了解生命周期配置文件的通用格式,请参阅适用于 JSON 的存储桶资源表示法或适用于 XML 的生命周期配置格式。
简介
为了使用对象生命周期管理,您需要定义生命周期配置,该配置必须在存储桶上设置。该配置包含一组适用于存储桶中的当前和未来对象的规则。当对象满足其中一个规则的条件时,Cloud Storage 会自动对该对象执行指定的操作。以下是一些示例用例:
- 将超过 365 天的对象的存储类别降级为 Coldline Storage。
- 删除 2019 年 1 月 1 日之前创建的对象。
- 在启用版本控制的存储桶中仅保留每个对象的 3 个最新版本。
生命周期配置
每个生命周期管理配置都包含一组规则。每条规则都包含一个操作以及一个或多个条件。
对象必须与规则中指定的所有条件都匹配,系统才会执行规则中的操作。
如果您指定包含相同操作的多个规则,则在对象与任何规则中的条件匹配时,系统会对该对象执行此操作。
如果多个规则同时满足单个对象的条件,则 Cloud Storage 将基于以下考虑,仅执行与其中一个规则关联的操作:
Delete
操作优先于任何SetStorageClass
操作。- 将对象切换至静态存储价格最低的存储类别的
SetStorageClass
操作优先。
例如,如果您有一条规则会将对象的类别更改为 Nearline Storage,而另一条规则会将对象的类别更改为 Coldline Storage,但两条规则都使用完全相同的条件,则在满足条件时,对象的类别会始终更改为 Coldline Storage。
您应先对开发数据测试生命周期规则,然后再将这些规则应用于生产环境,以确保规则不会在非预期的条件集下执行操作。如果无法做到这一点,您应该使用规则中的
matchesPrefix
或matchesSuffix
条件测试一小部分生产数据。对存储桶生命周期配置的更改可能需要长达 24 小时才能生效,在此期间,对象生命周期管理可能仍会根据旧配置执行操作。
例如,如果将
age
条件从 10 天更改为 20 天,则对象生命周期管理可能会由于旧配置的条件在之后最长 24 小时的时间里删除存在时间为 11 天的对象。
如需查看用例,请参阅对象生命周期管理的配置示例。
生命周期操作
生命周期规则仅指定以下操作之一:
删除
当某对象满足生命周期规则中指定的所有条件时,Delete
操作会删除该对象。 默认情况下,删除某个现行对象后,它会被软删除,Cloud Storage 会将其保留七天。您可以在软删除保留时长内restore该软删除的对象。
例外情况:在启用了对象版本控制的存储桶中,删除对象的现行版本会使该版本成为非当前版本,而删除非当前版本会将该版本从存储桶中删除。如需查看有关使用 Delete
操作以及对象版本控制的示例,请参阅用于删除对象的配置。
Delete
操作在对对象设置了对象保全或尚未符合保留政策时不会对该对象生效。只要对象一直满足 Delete
操作中的条件,Delete
操作就会在移除任何对象保全且符合任何保留政策后发生。
SetStorageClass
当对象满足生命周期规则中指定的所有条件时,SetStorageClass
操作会更改该对象的存储类别并更新该对象的修改时间。
SetStorageClass
支持以下存储类别转换:
原始存储类别 | 新存储类别 |
---|---|
Durable Reduced Availability (DRA) Storage | Nearline Storage Coldline Storage Archive Storage Multi-Regional Storage/Regional Storage1 |
Standard Storage、Multi-Regional Storage 或 Regional Storage | Nearline Storage Coldline Storage Archive Storage |
Nearline Storage | Coldline Storage Archive Storage |
Coldline Storage | Archive Storage |
1 对于单区域位置中的存储桶,新的存储类别不能为 Multi-Regional Storage。对于多区域位置或双区域位置中的存储桶,新的存储类别不能是 Regional Storage。
Cloud Storage 不会验证存储类别转换是否正确。这意味着您可以指定上表中未列出的存储类别转换,但该转换不会发生。您应验证您的生命周期规则是否使用列出的存储类别转换之一。
取消不完整的分段上传
当分段上传满足生命周期规则中指定的条件时,AbortIncompleteMultipartUpload
操作会取消不完整的分段上传并删除相关部分。
只有以下生命周期条件可与此操作结合使用:
尝试创建规则以将 AbortIncompleteMultipartUpload
操作与其他条件结合使用时导致错误。
生命周期条件
生命周期规则包括对象必须满足哪些条件才能发生规则中定义的操作。生命周期规则支持以下条件:
age
createdBefore
customTimeBefore
daysSinceCustomTime
daysSinceNoncurrentTime
isLive
matchesStorageClass
matchesPrefix
和matchesSuffix
noncurrentTimeBefore
numNewerVersions
所有条件都是可选的,但至少需要一个条件。如果尝试设置无效的生命周期配置(例如,使用不存在的操作或条件),您会收到 400 Bad request
错误响应,并且所有的现有生命周期配置仍会保留在原位。
age
当资源达到指定的存在时间(以天为单位)时,则满足 age
条件。存在时间从资源的创建时间开始计算。
例如,如果资源创建于世界协调时间 (UTC) 2022/01/10 10:00 且 age
条件为 10 天,则自世界协调时间 (UTC) 2022/01/20 10:00 起该资源即满足此条件。
createdBefore
如果某个对象在指定日期 (UTC) 的午夜之前创建,则满足 createdBefore
条件。
customTimeBefore
如果对象的 Custom-Time
元数据的日期部分早于此条件中指定的日期,则满足 customTimeBefore
条件。此条件是使用日期格式 YYYY-MM-DD
设置的。如果对象未设置 Custom-Time
元数据,则不满足 customTimeBefore
。
daysSinceCustomTime
如果在对象的 Custom-Time
元数据字段中指定的日期和时间后经过了指定的天数,则满足 daysSinceCustomTime
条件。例如,如果对象的 Custom-Time
为 2020-05-16T10:00:00Z
且 daysSinceCustomTime
条件为 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
,则对象的当前版本满足此条件。如果您不使用版本控制,则所有对象都会被视为活跃对象,并且在 isLive
为 true
时相匹配。
matchesPrefix
和 matchesSuffix
如果对象名称的开头或结尾与指定的前缀或后缀完全匹配(区分大小写),则满足 matchesPrefix
和 matchesSuffix
条件。您可以采用列表形式指定多个字符串(例如,"matchesSuffix": [".jpg", ".png"]
)。
使用 matchesPrefix
时,请勿添加存储桶名称或大多数请求路径中对象名称前面的 /
。例如,在 Google Cloud CLI 中,名为 my_bucket
的存储桶中对象的路径格式类似于 gs://my_bucket/pictures/paris_2022.jpg
。如需匹配对象,请使用条件,例如 "matchesPrefix":["pictures/paris_"]
。
所有规则最多可以指定 50 个前缀和 50 个后缀。一个前缀或后缀不能在单个条件中使用两次。
matchesStorageClass
如果存储桶中的对象以指定的存储类别存储,则满足 matchesStorageClass
条件。您可以为 matchesStorageClass
使用以下值:STANDARD
、NEARLINE
、COLDLINE
、ARCHIVE
、MULTI_REGIONAL
、REGIONAL
和 DURABLE_REDUCED_AVAILABILITY
。
通常,如果您要对 Standard Storage 对象使用 matchesStorageClass
条件,则还应包括以下内容:
如果存储桶位于一个区域位置,请在条件中包含
REGIONAL
和DURABLE_REDUCED_AVAILABILITY
。如果存储桶位于多区域位置或双区域位置,请在条件中包含
MULTI_REGIONAL
和DURABLE_REDUCED_AVAILABILITY
。
包含这些额外的类别可确保生命周期规则涵盖存储桶中可能设置为旧存储类别的旧对象。
noncurrentTimeBefore
noncurrentTimeBefore
条件通常仅与对象版本控制结合使用。如果对象在该条件中指定的日期之前成为非当前版本,则满足该条件。该条件是使用日期格式 YYYY-MM-DD
设置的。如果对象为当前版本,则不满足 noncurrentTimeBefore
。
numNewerVersions
numNewerVersions
条件通常仅与对象版本控制结合使用。如果此条件的值设置为 N,则当至少存在 N 个比某对象版本更新的版本(包括当前版本)时,该对象版本满足条件。对于当前对象版本,比其更新的版本数量被视为 0。对于最新的非当前版本,比其更新的版本数量为 1(如果没有当前对象版本,则为 0),依此类推。
对象生命周期行为
Cloud Storage 会定期检查已配置对象生命周期管理的存储桶中的所有对象,并根据存储桶规则执行所有适用的操作。Cloud Storage 以异步方式执行操作,因此满足条件与执行操作之间可能会有延迟。您的应用不应该依赖于在满足生命周期条件后的一定时间内发生的生命周期操作。
例如,如果某个对象满足删除条件,则系统可能不会立即删除该对象,并且您会在对该对象执行生命周期操作之后看到该对象。在启用了对象版本控制的存储桶中,即使活跃对象的非当前版本也满足删除规则的条件,该对象仍会在一段时间内存在非当前状态。
在对象保持原始状态的情况下您仍需支付适用费用,但有一个例外情况:如果对象满足以下所有条件,则系统会免除静态存储费用:
- 对象位于停用了软删除的存储桶中
- 对象受具有
Delete
操作的规则的约束 - 该规则的唯一条件是
age
条件 - 对象满足
age
条件
SetStorageClass
费用注意事项
与手动更改对象的存储类别类似,使用 SetStorageClass
计为 A 类操作,并按目标存储类别确定的费率计费。
与手动更改对象的存储类别不同,使用 SetStorageClass
不会重写对象。这使得对象生命周期管理具有某些价格优势:
例如,假设您在上传对象时将对象存储类别设为“Nearline Storage”,20 天后,您的生命周期配置将对象的存储类别更改为“Coldline Storage”。此更改不会产生任何检索费用或提前删除费用。如果您在存储类别更改 60 天后删除对象,则系统仅产生 10 天的提前删除费用,因为 Coldline Storage 的最短存储时长为 90 天,而对象总共存在了 80 天。
作为对比,假设您在上传对象时将对象存储类别设为“Nearline Storage”,20 天后,您使用重写命令更改对象的存储类别(仍然更改为“Coldline Storage”)。此更改会产生检索费用和 10 天提前删除费用。如果您在重写 60 天后删除对象,则系统会产生 30 天提前删除费用。
在这两个示例中,如果存储桶启用了软删除,则存储费用会增加,但提前删除费用会根据软删除保留期限的长度减少。
对象创建时间
在许多情况下,对象上传会很快完成;但是,对于进行多个请求的上传(例如可续传上传),从发送初始上传请求到最终上传请求之间,可能会需要几天的时间。在此类情况下,您应该注意以下事项:
- 在上传完成之前,对象不受生命周期规则的约束。
- 对象的创建时间取决于上传完成的时间。这会影响
age
和createdBefore
生命周期条件。 - 为对象设置
Custom-Time
时,您需要在上传开始时进行设置。如果您根据请求的时间设置Custom-Time
,则Custom-Time
可能比对象的创建时间早得多。这会影响customTimeBefore
和daysSinceCustomTime
生命周期条件。
到期时间元数据
如果为具有 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 主题发送通知。请注意,此功能不会记录执行操作的人员。
后续步骤
- 启用对象生命周期管理。
- 探索生命周期配置示例。
- 如需了解生命周期配置的通用格式,请参阅 JSON API 请求和 XML API 请求。