更新时间:2024-07-24 GMT+08:00

生命周期管理

生命周期管理是指通过配置指定的规则,实现在距离对象最后一次更新时间多少天后删除桶中的对象或者转换对象的存储类别。

对象更新时间是指对象的上传时间;对于历史版本对象,对象更新时间是指变为历史版本的时间。

图1 生命周期管理示意图

使用场景

生命周期管理可适用于以下典型场景:
  • 周期性上传的日志文件,可能只需要保留一个星期或一个月。到期后要删除它们。
  • 某些文档在一段时间内经常访问,但是超过一定时间后便可能不再访问了。这些文档需要在一定时间后转化为低频访问存储,归档存储或者删除。
  • 为了存档目的而向OBS上传的某些类型的数据,包括数字媒体存档、金融和医疗记录、原始基因组序列数据、长期数据库备份以及为符合监管要求而必须保留的数据。
  • 一次性删除桶中的大量文件。手动删除对象费时费力,且有数量限制。在桶中配置一条生命周期管理规则,设置定时删除所有文件即可。

对于上述场景中的对象,您可以定义用于识别这些对象的生命周期管理规则,通过这些规则实现对象的生命周期管理。

自动将某些不再频繁访问的对象转换为低频访问存储或者归档存储、深度归档存储,可以减少您的租赁费用。此处的“转换”表示在不复制原对象的情况下修改对象的存储类别。您可以在对象页面手动修改对象的存储类别,详情请参见上传对象的相关操作,也可以通过配置生命周期规则转换对象的存储类别。

您可以向不受版本控制的桶和启用了版本控制的桶添加生命周期配置。默认情况下,桶不受版本控制,您可以选择启用版本控制。启用了版本控制的桶会维护一个当前对象版本,以及零个或零个以上非当前对象版本。您可以结合使用版本控制和生命周期规则来帮助管理对象的存储成本。通过使用预定义的生命周期配置操作,可以管理当前和非当前对象版本的生命周期。

注意事项

  • 单个桶的生命周期规则条数没有限制,但一个桶中所有生命周期规则的XML描述总大小不能超过20KB。
  • 您最多可以在一个并行文件系统下配置20条生命周期管理规则,超过20条将提示不支持。
  • 创建生命周期规则时,规则名称只能由大写或小写的英文字母、数字、英文句号(.)、下划线(_)和连字符(-)组成。
  • 低频访问存储的最低存储时间为30天,归档存储的最低存储时间为90天,深度归档存储的最低存储时间为180天。如果对象经过转换,归档存储时间少于最低存储时间,需要补足剩余天数的存储费用。
  • 对象存储类别转换限制:
    • 仅支持将标准存储对象转换为低频访问存储对象,低频访问存储对象转换为标准存储对象需手动转换。
    • 仅支持将标准存储或低频访问存储对象转换为归档存储对象。如果要将归档存储对象转换为标准存储或低频访问存储对象,需要手动恢复对象,然后手动转换存储类别。
    • 仅支持将标准存储、低频访问存储或归档存储对象转换为深度归档存储对象。如果要将深度归档存储对象转换为标准存储、低频访问存储对象或归档存储,需要手动恢复对象,然后手动转换存储类别。
    • 归档和深度归档存储不支持多AZ。因此不支持使用生命周期的存储类别转换功能,将多AZ桶或对象的存储类别转化为归档或深度归档存储。
  • 对象过期删除:

    OBS提供Expiration操作,您可在生命周期配置中指定该操作以使对象过期。此外,对于启用了版本控制的桶,OBS还提供NoncurrentVersionExpiration操作,用于使非当前版本的对象过期。

    • 如果桶不受版本控制,则Expiration操作会使OBS永久删除对象。
    • 如果桶启用了版本控制(或版本控制已暂停),则Expiration操作会通过将删除标记添加为新的当前版本,在逻辑上删除当前版本。NoncurrentVersionExpiration操作永久删除非当前版本。
  • 除OBS桶可以设置生存期外,上传对象时也可以设置生存期。对象的生存期优先于桶的生存期。

    在对象的生存期结束后,OBS会将该对象加入删除队列并异步删除它。过期日期和OBS删除对象的日期之间可能会有一段滞后。对象被删除后,不会再向您收取相关的存储时间费用。

    要找出对象计划过期的时间,您可以使用GET对象或HEAD对象API。这些API将返回可提供对象过期信息的响应标头。

  • 对象更新后,系统会将下一个UTC零点作为对象存储的起始时间开始计算生命周期。生命周期规则执行最长耗时24小时。因此,存储类别的转换以及过期被删除可能会存在延时,且一般不会超过48小时。配置生命周期规则后,如果期间修改了生命周期配置,会重新计算生效时间。
  • 修改生命周期配置后,配置不会立即对桶内所有对象生效。例如原有生命周期规则为1天过期删除,2021年1月3日已经开始删除2021年1月1日上传的满足过期条件的对象,如果此时修改生命周期规则为7天过期删除,那么新规则不会对2021年1月1日上传的对象生效,2021年1月1日上传的对象会在2021年1月3日被删除完成,新的规则只会对2021年1月2日及以后上传的对象生效。

生命周期规则

生命周期规则通常包含两个关键要素:

  • 策略:生命周期规则匹配的对象。
    • 按前缀配置:指定对象名前缀来匹配受约束的对象,则匹配该前缀的对象将受规则影响。
    • 配置到整个桶:指定将生命周期管理规则配置到整个桶,则桶内所有对象都将受规则影响。
  • 时间:设置对象的转换类别及转换时间。
    您可以指定在对象最后一次更新后多少天,受规则影响的对象将转换为低频访问存储、归档存储、深度归档存储或者过期并自动被OBS删除。
    • 转换为低频访问存储:指定在对象最后一次更新后多少天,受规则影响的对象将转换为低频访问存储。
    • 转换为归档存储:指定在对象最后一次更新后多少天,受规则影响的对象将转换为归档存储。
    • 转换为深度归档存储:指定在对象最后一次更新后多少天,受规则影响的对象将转换为深度归档存储。
    • 过期删除:指定在对象最后一次更新后多少天,受规则影响的对象将过期并自动被OBS删除。
    时间设置有如下约束限制:
    • 仅设置一种转换:最少设置1天。
    • 设置多种转换:后者时间要比前者时间最少长1天。

      例:同时设置“转换为低频访问存储”和“过期删除”,不设置“转换为归档存储”。假设转换为低频访问存储设置为23天,则过期删除时间至少需要设置为24天。

      低频访问存储的最低存储时间为30天,归档存储的最低存储时间为90天,深度归档存储的最低存储时间为180天。如果对象在生命周期管理规则作用下,存储时间少于最低存储时间,需要补足剩余天数的存储费用,请您根据业务情况合理设置时间。

      例:上传标准存储的对象后,不进行任何更新。生命周期管理规则的策略为配置到整个桶,3天转换为低频访问存储,4天转换为归档存储,7天过期删除。那么OBS服务将收取3天的标准存储费用,30天低频访问存储费用和90天的归档存储费用。

生命周期配置元素

您可将生命周期配置指定为XML。该配置包含一个或多个生命周期规则。

每个规则由以下内容组成:

  • 规则元数据,包含规则ID以及用于指示规则是已启用还是已禁用的状态。如果规则处于禁用状态,OBS将不会执行规则中指定的任何操作。
  • 筛选条件,用于标识即将应用规则的对象。您可以使用对象的前缀来指定筛选条件。
  • 您希望OBS执行指定操作时的一个或多个转换或过期操作,带有位于对象的生命周期内的日志或时间段。

以下是两个配置示例:

例1:不受版本控制的桶的生命周期配置

默认情况下,您的桶不受版本控制。即桶中的每个对象只有一个版本。

假设您的桶未启用版本控制,且希望在创建30天后将对象名前缀为“documents/”的对象转为低频访问存储对象,创建60天后转为归档存储对象,创建1年之后永久删除。为此,您可以向桶附加以下生命周期配置。该生命周期配置定义的规则包含两个操作(Transition和Expiration),该规则应用于键前缀为“documents”(在Prefix元素中指定)的对象。

<LifecycleConfiguration> 
    <Rule> 
        <ID>sample-rule</ID> 
        <Prefix>documents/</Prefix> 
        <Status>Enabled</Status> 
        <Expiration> 
             <Days>365</Days> 
        </Expiration> 
        <Transition>  
             <Days>30</Days> 
             <StorageClass>WARM</StorageClass>
        </Transition>  
        <Transition>  
             <Days>60</Days>  
             <StorageClass>COLD</StorageClass>  
        </Transition> 
    </Rule> 
</LifecycleConfiguration>

例2:启用了版本控制的桶的生命周期配置

您可以选择在桶上启用版本控制。如果您的桶启用了版本控制,则您有一个当前对象版本,以及零个或零个以上非当前版本。详情请参见多版本控制。通过对象版本控制,您可以维护对象版本的历史记录,而通过生命周期,您可以控制各版本存在的时间长度,或是各版本在转换为低频访问存储或归档存储类别以进行长期存档之前保持活动状态的时间长度。

对于启用了版本控制的桶,生命周期配置提供了更多预定义操作,可用于管理非当前对象版本。示例中,该生命周期配置有一个规则,它对键前缀为“logs/”的对象指定两个操作(NoncurrentVersionTransition和NoncurrentVersionExpiration)。NoncurrentVersionTransition操作在对象成为非当前版本30天之后,请求OBS将对象转换为低频访问存储类别,成为非当前版本60天后请求OBS转换为归档存储类别;NoncurrentVersionExpiration操作在对象成为非当前版本180天之后请求OBS永久删除对象。

<LifecycleConfiguration> 
    <Rule> 
        <ID>sample-rule</ID> 
        <Prefix>logs/</Prefix> 
        <Status>Enabled</Status>    
        <NoncurrentVersionExpiration>      
            <NoncurrentDays>180</NoncurrentDays>     
        </NoncurrentVersionExpiration> 
        <NoncurrentVersionTransition>  
            <NoncurrentDays>30</NoncurrentDays>  
            <StorageClass>WARM</StorageClass>  
        </NoncurrentVersionTransition>  
        <NoncurrentVersionTransition>  
            <NoncurrentDays>60</NoncurrentDays>  
            <StorageClass>COLD</StorageClass>  
        </NoncurrentVersionTransition> 
    </Rule> 
</LifecycleConfiguration>

您可以使用预定义NoncurrentVersionTransition和NoncurrentVersionExpiration操作管理桶中的非当前版本。

一般而言,每个生命周期配置规则都由以下内容组成:

  • 规则元数据,包括规则ID(<ID>元素)以及用于指示规则是处于启用还是禁用状态(<Status>元素)。如果规则处于禁用状态,则OBS不会执行规则中指定的任何操作。
  • 前缀(<Prefix>元素),用于通过键前缀标识要应用规则的对象。
  • 您希望OBS对指定对象执行的操作(例如,上面示例中<NoncurrentVersionTransition>和<NoncurrentVersionExpiration>元素)。每个操作都需指定对象生命周期中您希望OBS执行指定操作的日期或时间段。

生命周期配置规则中元素介绍如下:

  • ID元素

    一个生命周期配置最多可以有1000个规则。ID元素唯一地标识规则。

  • Status元素

    Status元素值可以是Enabled或Disabled。如果规则处于禁用状态,则OBS不会执行在规则中定义的任何操作。

  • Prefix元素

    生命周期配置规则可应用于键名称以规则指定的前缀开头的单个对象或多个对象。例如,假设您拥有以下对象:

    • logs/day1
    • logs/day2
    • logs/day3
    • ExampleObject.jpg

      如果您将ExampleObject.jpg指定为前缀,则规则仅应用于该特定对象。如果您将logs/指定为前缀,规则将应用于密钥名称以字符串“logs/”开头的三个对象。如果您指定空的前缀,该规则将应用于桶中的所有对象。

  • Action元素

    通过在生命周期配置规则中指定预定义操作,您可以请求OBS在对象的生命周期中执行特定操作。预定义操作包括:Transition、Expiration、NoncurrentVersionTransition和NoncurrentVersionExpiration。这些操作的效果取决于桶的版本控制状态。

    默认情况下,桶不受版本控制。您可以选择在桶上启用版本控制,在这种情况下,对象有一个当前版本和零个或零个以上非当前版本。您还可以临时暂停版本控制。详情请参见多版本控制

  • Transition操作

    通过将对象的存储类别更改为低频访问存储或归档存储、深度归档存储来存档对象。达到对象生命周期中指定的日期或时间段时,OBS将适用的对象转换为低频访问存储或归档存储、深度归档存储对象。

    • 不受版本控制的桶–Transition操作将对象的存储类别设置为低频访问存储或归档存储、深度归档存储。
    • 启用了版本控制和暂停了版本控制的桶–Transition操作将当前版本对象的存储类别设置为低频访问存储或归档存储、深度归档存储。此操作不影响对象的非当前版本。
  • Expiration操作

    此操作可以使规则适用的对象过期。OBS使所有过期的对象不可用。是否永久删除对象取决于桶的版本控制状态。

    Expiration操作不会删除未合并的多段对象。

    • 不受版本控制的桶–Expiration操作永久删除对象,删除的对象无法恢复。
    • 启用了版本控制的桶–此操作仅应用于当前对象版本,它不影响非当前版本。这种情况下的Expiration操作不会永久删除当前版本。它通过引入删除标记,将当前版本保留为非当前版本。如果当前版本已经带有删除标记,则不执行任何操作。如果当前版本是唯一的对象版本并且带有删除标记,则OBS将删除当前版本。清除删除标记时可能存在一些延迟,因为OBS需确保这是唯一的对象版本。

在不指定版本ID的情况下,对当前版本带删除标记的对象执行GET请求,则OBS将判断为对象已删除,返回404 Object Not Found错误。但是,您可以通过在GET请求中指定版本ID来恢复删除的对象。

例如,您可以设置一个规则,使名为photo.gif的对象创建五天之后过期。如果photo.gif在2016年1月1日上午10:30 UTC创建,则过期规则会在2016年1月7日00:00 UTC(对象创建五天之后)后的某个时间点执行,该时间点不会晚于2016年1月7日23:59 UTC。对于不受版本控制的桶,删除操作会将photo.gif永久删除;而对于启用了版本控制的桶,在过期规则执行之后,photo.gif(版本 111111)仍处于存储状态,可以在需要时进行访问,但是对象的当前版本(版本 4857693)现在带删除标记。原始photo.gif成为非当前版本。有关删除标记工作原理的信息,请参见多版本控制

已暂停版本控制的桶:桶已暂停版本控制时,过期会导致使用null版本ID创建删除标记。任何现有null版本都会由新的null版本覆盖,与该版本关联的数据无法恢复。

特定于启用版本控制(或已暂停版本控制)的桶的操作

通过Transition和Expiration生命周期操作可以管理对象当前版本的生命周期。通过NoncurrentVersionTransition和NonCurrentVersionExpiration操作可以管理对象非当前(以前)版本的生命周期。

仅当桶是启用版本控制(或已暂停版本控制)的桶时,以下生命周期配置操作才适用。启用版本控制的桶可以有一个对象的许多版本,也就是一个当前版本和零个或零个以上非当前版本。您可以使用这些操作请求OBS对非当前对象版本执行特定操作。这些操作不会影响对象的当前版本。

NoncurrentVersionTransition操作–您可以使用此操作指定非当前版本在转换为WARM或COLD存储类型之前保留为STANDARD存储类型的时间长度。

NoncurrentVersionExpiration操作–您可以使用此操作指定在OBS永久删除非当前对象版本之前保留它们的时间长度。删除的对象无法恢复。

例如,如果您要启用一个为期五天的时段以更正任何意外删除或覆盖,您可以配置一个过期规则,用于在对象成为非当前版本五天之后删除非当前版本的对象。

在2016年1月1日上午10:30 UTC,您创建一个名为photo.gif(版本ID 111111)的对象。在2016年1月2日上午10:30 UTC,您意外删除了photo.gif(版本ID 111111),这会使用新版本ID(如版本ID 4857693)创建一个删除标记。您现在有五天时间可以在永久删除之前,恢复原始版本的photo.gif(版本ID 111111)。

在2016年1月8日00:00 UTC,过期生命周期规则执行并永久删除photo.gif(版本ID111111)(在它成为非当前版本五天之后)。

OBS如何计算对象已成为非当前版本的时间长度

在启用版本控制的桶中,您可以有一个对象的多个版本,始终有一个当前版本和零个或零个以上非当前版本。每次上传对象时,当前版本都变为非当前版本,新上传的版本(后续者)成为当前版本。为了确定对象成为非当前版本的天数,OBS会查看新上传版本的创建时间。OBS使用新上传版本创建以来的天数作为对象成为非当前版本的天数。

在使用生命周期配置时还原对象的非当前版本

您可以通过以下两种方式还原对象的非当前版本:

  1. 通过将对象的非当前版本复制到相同桶中。复制的对象将成为该对象的当前版本,且所有对象版本都保留。
  2. 通过永久删除当前版本的对象。当您删除当前对象版本时,实际上是将非当前版本转换为该对象的当前版本。

推荐您使用第一种方法,即将对象的非当前版本复制到相同桶中。由于OBS的最终一致性语义,在更改传播之前,永久删除的当前版本可能不会消失(OBS可能不知道此删除操作)。同时,在您配置了使非当前对象过期的生命周期之后,可能会永久删除非当前对象,包括您要还原的对象。因此,复制非当前版本的方法更加安全。

表1列出了对对象执行的生命周期配置规则操作与桶多版本控制状态的关系。

表1 生命周期配置规则操作与桶多版本控制状态

操作

不受版本控制的桶

启用多版本控制的桶

已暂停多版本控制的桶

Transition

达到对象生命周期中指定的日期或时间段时

Transition转换对象,可以转换为WARM或COLD存储类别。

如果当前版本不带删除标记且是最新版本,则满足迁移时间可以迁移为WARM或COLD存储类别。

行为与启用了版本控制的桶相同。

Expiration

达到对象生命周期中指定的日期或时间段时

Expiration删除对象,删除的对象无法恢复。

如果当前版本不带删除标记,则生命周期创建删除标记(这会成为当前版本),现有当前版本保留为非当前版本。

桶已暂停版本控制时,过期会导致使用null版本ID创建删除标记。任何现有null版本都会由新的null版本覆盖,与该版本关联的数据无法恢复。

NoncurrentVersionTransition

对象成为非当前版本之后达到指定天数时

NoncurrentVersionTransition无效。

如果当前版本不带删除标记且不是最新版本,则满足转换时间可以转换为WARM或COLD存储类别。

行为与启用了版本控制的桶相同。

NoncurrentVersionExpiration

对象成为非当前版本之后达到指定天数时

NoncurrentVersionExpiration无效。

NoncurrentVersionExpiration操作删除对象的非当前版本,删除的对象无法恢复。

行为与启用了版本控制的桶相同。

基于特定日期的生命周期规则

使用Transition和Expiration操作时,您可以指定执行操作的日期(该日期必须符合ISO8601格式,时间始终为UTC午夜0点)。如果指定一个过去的日期,所有适用对象会立即执行操作。

不支持使用OBS控制台创建基于日期的生命周期规则。

基于日期的操作并非一次性操作。即使过了该日期后,只要规则状态为“已启用”,OBS仍会继续应用该基于日期的操作。

例如,假设您指定一个基于日期的过期操作来删除所有对象(假设规则中未指定任何筛选条件)。在指定日期,OBS会使存储桶中的所有对象过期。此外,OBS还会继续使你在存储桶中创建的所有新对象过期。要终止生命周期操作,您必须从生命周期配置中删除操作、禁用规则或从生命周期配置中删除规则。

基于对象期限的生命周期规则

使用Transition和Expiration操作时,您可以指定执行操作的时间段(自对象创建以来的天数)。指定天数后,OBS从第二天的UTC午夜0点开始计算时间。例如,如果对象的创建时间是2016年1月15日上午10:30 UTC,并且您在转换规则中指定了3天,则对象的转换日期将计算为2016年1月19日00:00 UTC。

OBS仅为每个对象保持上次修改日期。例如,OBS控制台在对象Properties(属性)窗格中显示LastModified(上次修改日期)日期。最初创建新对象时,此日期反映对象的创建日期。如果您替换对象,则此日期会相应地更改。

使用NoncurrentVersionTransition和NoncurrentVersionExpiration操作时,您可将对象版本成为非当前版本之后(即自对象覆盖或删除以来)的天数指定为对指定对象执行操作的时间段。

使用NoncurrentVersionTransition和NoncurrentVersionExpiration操作指定天数时,OBS将规则中指定的天数与对象版本成为非当前版本的时间相加,按照得到的时间从第二天的UTC午夜0点开始计算时间。例如,桶中某个对象当前版本的创建时间是2016年1月1日上午10:30 UTC,如果对象版本在2016年1月15日上午10:30 UTC成为非当前版本,并且您在转换规则中指定了3天,那么对象的转换日期计算为2016年1月19日00:00 UTC。

配置生命周期规则时,在同一个规则内或前缀包含关系的规则间,如果配置Transition和Expiration,那么Date或Days应保持一致。

使用方式

OBS支持通过控制台、API、SDK方式配置生命周期规则。

支持的使用方式

参考文档

控制台

配置生命周期规则

SDK

OBS支持多种语言SDK,请从SDK概述页面选择进入对应的开发指南查阅。

API

设置桶的生命周期配置

获取桶的生命周期配置

删除桶的生命周期配置