开发者社区> 问答> 正文

OSS如何实现管理对象生命周期?

OSS 提供 Object(文件)生命周期管理来为您管理Object。您可以为某个Bucket定义生命周期配置,来为该Bucket的Object定义各种规则。目前,您可以通过规则来删除相匹配的Object。每条规则都由如下几个部分组成:

  • Object名称前缀只有匹配该前缀的Object才适用这个规则。
  • 操作您希望对匹配的Object所执行的操作。
  • 日期或天数您期望在特定日期或者在Object最后修改时间后多少天执行指定的操作。

只要Object名称前缀和一条规则的前缀匹配,那么该规则就适用于它。例如,一个Bucket有如下几个Object:
  1. [backcolor=transparent]logs[backcolor=transparent]/[backcolor=transparent]program[backcolor=transparent].[backcolor=transparent]log[backcolor=transparent].[backcolor=transparent]1
  2. [backcolor=transparent]logs[backcolor=transparent]/[backcolor=transparent]program[backcolor=transparent].[backcolor=transparent]log[backcolor=transparent].[backcolor=transparent]2
  3. [backcolor=transparent]logs[backcolor=transparent]/[backcolor=transparent]program[backcolor=transparent].[backcolor=transparent]log[backcolor=transparent].[backcolor=transparent]3
  4. [backcolor=transparent]doc[backcolor=transparent]/[backcolor=transparent]readme[backcolor=transparent].[backcolor=transparent]txt

如果一个规则指定的前缀是logs/,那么该规则就适用于前三个以logs/开头的Object;如果前缀是doc/readme.txt,那么这条规则就只对doc/readme.txt起作用。
当前,规则支持“过期删除”操作。例如,您可以设置这样的规则:当前缀为logs/的Object的最后一次更新是30天前,就删除它们;也可以指定在某年某月某日删除doc/readme.txt。
当一个Object匹配到某个过期规则时,GET和HEAD该Object时,OSS在响应Header中加入x-oss-expiration头。它包含了两个键值对:expiry-date的值表示Object的过期日期;rule-id的值表示相匹配的规则ID。

举例


您可以通过OSS开放接口来设置Bucket的生命周期配置。生命周期配置是由XML格式给出的,下面是一个具体的例子。
  1. [backcolor=transparent]<LifecycleConfiguration>
  2. [backcolor=transparent]<Rule>
  3. [backcolor=transparent]<ID>[backcolor=transparent]delete logs after 10 days[backcolor=transparent]</ID>
  4. [backcolor=transparent]<Prefix>[backcolor=transparent]logs/[backcolor=transparent]</Prefix>
  5. [backcolor=transparent]<Status>[backcolor=transparent]Enabled[backcolor=transparent]</Status>
  6. [backcolor=transparent]<Expiration>
  7. [backcolor=transparent]<Days>[backcolor=transparent]10[backcolor=transparent]</Days>
  8. [backcolor=transparent]</Expiration>
  9. [backcolor=transparent]</Rule>
  10. [backcolor=transparent]<Rule>
  11. [backcolor=transparent]<ID>[backcolor=transparent]delete doc[backcolor=transparent]</ID>
  12. [backcolor=transparent]<Prefix>[backcolor=transparent]doc/[backcolor=transparent]</Prefix>
  13. [backcolor=transparent]<Status>[backcolor=transparent]Disabled[backcolor=transparent]</Status>
  14. [backcolor=transparent]<Expiration>
  15. [backcolor=transparent]<CreatedBeforeDate>[backcolor=transparent]2014-12-31T00:00:00.000Z[backcolor=transparent]</CreatedBeforeDate>
  16. [backcolor=transparent]</Expiration>
  17. [backcolor=transparent]</Rule>
  18. [backcolor=transparent]</LifecycleConfiguration>

在这个例子中,各个元素的含义如下:
  • <ID>:每个规则唯一的标识
  • <Status>:Enabled或Disabled。OSS只会应用值为Enabled的规则。
  • <Prefix>:前缀。
  • <Expiration>:过期操作。子元素<CreatedBeforeDate>或<Days>指定绝对和相对过期时间。这里CreatedBeforeDate表示的含义是:将最后修改时间早于2014-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午夜零点,并且符合形如2014-01-01T00:00:00.000Z的ISO8601格式。OSS会在当前时间超过2014-01-01午夜零点时删除匹配的Object。
  • 当规则设定为天数时,OSS把Object最后更新时间(Last-Modified)加上天数,再取整到下一个UTC午夜零点。例如,一个Object的最后更新时间是UTC的2014年4月12日上午1点,相匹配的规则定义的天数是3天,那么过期时间就是UTC 2014年4月16日0点整。
  • OSS会在指定时间删除与规则相匹配的Object。请注意,通常Object会在指定时间稍稍延后一段时间才被删除。
  • 通常Object的最后更新时间和创建时间相差无几。当一个Object被多次Put时,最后更新时间是最后一次Put的时间;当一个Object被Copy到自身时,最后更新时间是Copy发生时的时间。


功能使用参考

展开
收起
青衫无名 2017-10-17 15:38:00 3698 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载