OSS 提供 Object(檔案)生命週期管理來為您管理Object。您可以為某個Bucket定義生命週期配置,來為該Bucket的Object定義各種規則。目前,您可以通過規則來刪除相匹配的Object。每條規則都由如下幾個部分組成:

  • 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該Object時,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>2014-12-31T00:00:00.000Z</CreatedBeforeDate>
</Expiration>
</Rule>
</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發生時的時間。

功能使用參考