OSS支持设置生命周期(Lifecycle)规则,自动删除过期的文件和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。每条规则包含:

  • Object名称前缀

    只有匹配该前缀的Object才适用这个规则。

  • 操作

    您希望对匹配的Object所执行的操作。

  • 日期或天数

    您期望在特定日期或者在Object最后修改时间后多少天执行指定的操作。

只要Object名称前缀和一条规则的前缀匹配,那么该规则就适用于它。例如,一个Bucket有如下几个Object:

logs/program.log.1
logs/program.log.2
logs/program.log.3
doc/readme.txt

如果一个规则指定的前缀是logs/,那么该规则就适用于前三个以logs/开头的Object;如果前缀是doc/readme.txt,那么这条规则就只对doc/readme.txt起作用。

规则支持过期删除操作。例如,您可以设置这样的规则:当前缀为logs/的Object的最后一次更新是30天前,就删除它们;也可以指定在某年某月某日删除doc/readme.txt。

当一个Object匹配到某个过期规则,执行GET和HEAD操作时,OSS在响应Header中加入x-oss-expiration头。它包含了两个参数:expiry-date的值表示Object的过期日期;rule-id的值表示相匹配的规则ID。

举例

您可以通过OSS接口来设置Bucket的生命周期。生命周期配置为XML格式,举例如下:

<LifecycleConfiguration>
<Rule>
<ID>delete logs after 10 days</ID>
<Prefix>logs/</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>10</Days>
</Expiration>
</Rule>
<Rule>
<ID>delete doc</ID>
<Prefix>doc/</Prefix>
<Status>Disabled</Status>
<Expiration>
<CreatedBeforeDate>2017-12-31T00:00:00.000Z</CreatedBeforeDate>
</Expiration>
</Rule>
</LifecycleConfiguration>

在这个例子中,各个元素的含义如下:

  • <ID>:每个规则唯一的标识。
  • <Status>:取值为Enabled或Disabled。OSS只会应用取值为Enabled的生命周期规则。
  • <Prefix>:前缀。
  • <Expiration>:过期操作。子元素<CreatedBeforeDate><Days>指定绝对和相对过期时间。
    • CreatedBeforeDate表示将最后修改时间早于2017-12-31T00:00:00.000Z的文件删除,晚于这个时间的Object不会被删除。
    • Days表示将相对最后修改时间10天之后的Object删除。

在这个例子中,第一条规则会删除前缀为logs/,最后更新时间是10天前的Object。第二条规则虽然指定了删除2014年12月31日之前被修改的前缀为doc/的Object,但是由于它的Status是Disabled状态,所以该规则并不会生效。

细节分析

  • 前缀
    • 前缀的命名规范和Object的命名规范一样。
    • 当前缀为空时,表明该规则适用于Bucket里的所有Object。
    • 任意两个前缀不能有重叠。例如,同一Bucket配置了两条规则,一条前缀是logs/,一条前缀是logs/program,那么OSS会返回错误。
  • 规则生效时间
    • 当规则设置为在指定日期删除Object,该日期必须是UTC午夜零点,并且符合形如2017-01-01T00:00:00.000Z的ISO8601格式。OSS会在当前时间超过2017-01-01午夜零点时删除匹配的Object。
    • 当规则设定为天数时,OSS把Object最后更新时间(Last-Modified)加上天数,再取整到下一个UTC午夜零点。例如,一个Object的最后更新时间是UTC的2017年4月12日上午1点,相匹配的规则定义的天数是3天,那么过期时间就是UTC 2017年4月16日0点整。
    • OSS会在指定时间删除与规则相匹配的Object。请注意,通常Object会在指定时间稍稍延后一段时间才被删除。
    • 通常Object的最后更新时间和创建时间相差无几。当一个Object被多次Put时,最后更新时间是最后一次Put的时间;当一个Object被Copy到自身时,最后更新时间是Copy发生时的时间。
  • 费用

    成功的生命周期异步请求操作会记录在访问日志中并产生相关的请求次数费用,失败的不会被记录和收费。

功能使用参考