您可以基于最后一次修改時間以及最后一次訪問時間的策略創(chuàng)建生命周期規(guī)則,定期將存儲空間(Bucket)內的多個文件(Object)轉儲為指定存儲類型,或者將過期的Object和碎片刪除,從而節(jié)省存儲費用。本文為您介紹如何調用PutBucketLifecycle接口為存儲空間(Bucket)設置生命周期規(guī)則。
注意事項
要為存儲空間設置生命周期規(guī)則,您必須有
oss:PutBucketLifecycle
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。PutBucketLifecycle為覆蓋語義。例如,某個Bucket已配置了生命周期規(guī)則Rule1,您需要在Rule1基礎上繼續(xù)追加生命周期規(guī)則Rule2,您需要執(zhí)行以下操作。
調用GetBucketLifecycle接口獲取當前生命周期規(guī)則配置Rule1。
在Rule1基礎上疊加Rule2。
調用PutBucketLifecycle接口更新生命周期規(guī)則為Rule1+Rule2。
支持對Object以及Part(以分片方式上傳,但最后未提交的分片)設置過期時間。
支持基于last access time(最后一次訪問時間)或者last modify time(最后一次修改時間)匹配規(guī)則。
請求語法
PUT /?lifecycle HTTP/1.1
Date: GMT Date
Content-Length:ContentLength
Content-Type: application/xml
Authorization: SignatureValue
Host: BucketName.oss.aliyuncs.com
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>RuleID</ID>
<Prefix>Prefix</Prefix>
<Status>Status</Status>
<Expiration>
<Days>Days</Days>
</Expiration>
<Transition>
<Days>Days</Days>
<StorageClass>StorageClass</StorageClass>
</Transition>
<AbortMultipartUpload>
<Days>Days</Days>
</AbortMultipartUpload>
</Rule>
</LifecycleConfiguration>
請求頭
名稱 | 類型 | 是否必選 | 示例值 | 描述 |
x-oss-allow-same-action-overlap | 字符串 | 否 | true | 指定生命周期規(guī)則是否允許前綴重疊。取值如下:
|
此接口涉及的其他公共請求頭,例如Date,Authorization等。更多信息,請參見公共請求頭(Common Request Headers)。
請求元素
名稱 | 類型 | 是否必選 | 示例值 | 描述 |
LifecycleConfiguration | 容器 | 是 | 不涉及 | Lifecycle配置的容器,最多支持1000條規(guī)則。 子節(jié)點:Rule 父節(jié)點:無 |
Rule | 容器 | 是 | 不涉及 | 生命周期規(guī)則的容器。Object設置過期時間必須大于轉儲為IA或者Archive存儲類型的時間。 子節(jié)點:ID、Prefix、Status、Expiration 父節(jié)點:LifecycleConfiguration |
ID | 字符串 | 否 | rule1 | 標識規(guī)則的唯一ID,最多由255個字符組成。如果未指定或者指定該值為空時,OSS會自動生成一個唯一ID。 子節(jié)點:無 父節(jié)點:Rule |
Prefix | 字符串 | 否 | tmp/ | 指定規(guī)則所適用的前綴(Prefix)。不支持設置相同的Prefix。
子節(jié)點:無 父節(jié)點:Rule |
Status | 字符串 | 是 | Enabled | 是否啟用規(guī)則。取值如下:
父節(jié)點:Rule |
Expiration | 容器 | 否 | 不涉及 | 指定Object的過期屬性。 對于已開啟版本控制的Bucket,指定的過期時間只對Object當前版本生效。 Object的過期時間必須大于轉儲為IA或Archive類型的時間。 子節(jié)點:Days、CreatedBeforeDate或ExpiredObjectDeleteMarker 父節(jié)點:Rule |
Days | 正整數 | Days與CreatedBeforeDate互斥 | 1 | 指定生命周期規(guī)則在距離Object最后更新多少天后生效。 當請求中存在IsAccessTime參數且IsAccessTime取值為true時,此參數表示生命周期規(guī)則在距離Object最后訪問多少天后生效。 父節(jié)點:Expiration或AbortMultipartUpload |
CreatedBeforeDate | 字符串 | CreatedBeforeDate與Days互斥 | 2002-10-11T00:00:00.000Z | 指定一個日期,OSS會對最后更新時間早于該日期的數據執(zhí)行生命周期規(guī)則。日期格式為yyyy-MM-ddT00:00:00.000Z。 日期需要按照ISO8601標準表示并使用UTC時間,且必須為UTC的零點。 父節(jié)點:Expiration或者AbortMultipartUpload |
ExpiredObjectDeleteMarker | 字符串 | 否 | true | 指定是否自動移除過期刪除標記。取值如下:
父節(jié)點:Expiration |
Transition | 容器 | 否 | 不涉及 | 指定Object在有效生命周期中,OSS何時轉換Object的存儲類型。 Standard Bucket中Standard Object可以轉儲為IA、Archive或ColdArchive存儲類型,但轉儲Archive存儲類型的時間必須比轉儲IA存儲類型的時間長。例如Transition IA設置Days為30,Transition Archive設置Days必須大于30。 父節(jié)點:Rule 子節(jié)點:Days、CreatedBeforeDate和StorageClass 重要
|
StorageClass | 字符串 | 如果存在父節(jié)點Transition或NoncurrentVersionTransition,則必選 | IA | 指定Object轉儲的存儲類型。取值如下:
重要
父節(jié)點:Transition |
AbortMultipartUpload | 容器 | 否 | 不涉及 | 指定未完成分片上傳的過期屬性。 子節(jié)點:Days或CreatedBeforeDate 父節(jié)點:Rule |
Tag | 容器 | 否 | 不涉及 | 指定規(guī)則所適用的對象標簽,可設置多個。 父節(jié)點:Rule 子節(jié)點:Key、Value 說明 在OSS ON云盒使用場景中,不支持使用此選項。 |
Key | 字符串 | 如果存在父節(jié)點Tag,則必選 | TagKey1 | 對象標簽的鍵。 父節(jié)點:Tag |
Value | 字符串 | 如果存在父節(jié)點Tag,則必選 | TagValue1 | 對象標簽的值。 父節(jié)點:Tag |
NoncurrentVersionExpiration | 容器 | 否 | 不涉及 | 指定Object非當前版本生命周期規(guī)則的過期屬性。 子節(jié)點:NoncurrentDays |
NoncurrentVersionTransition | 容器 | 否 | 不涉及 | 在有效的生命周期規(guī)則中,OSS何時將指定Object的非當前版本轉儲為IA或者Archive存儲類型。 Standard類型的Object轉儲為Archive類型的時間必須大于轉儲為IA類型的時間。 說明 在OSS ON云盒使用場景中,不支持使用此選項。 子節(jié)點:NoncurrentDays、StorageClass |
NoncurrentDays | 字符串 | 如果存在父節(jié)點NoncurrentVersionExpiration或NoncurrentVersionTransition,則必選 | 10 | 指定生命周期規(guī)則在Object成為非當前版本多少天后生效。 當請求中存在IsAccessTime參數且IsAccessTime取值為true時,此參數表示生命周期規(guī)則在Object最后訪問多少天后生效。 父節(jié)點:NoncurrentVersionTransition、NoncurrentVersionExpiration |
IsAccessTime | 字符串 | 否 | true | 指定是否基于last access time匹配規(guī)則。取值如下:
父節(jié)點:Transition或NoncurrentVersionTransition。 說明 在OSS ON云盒使用場景中,不支持使用此選項。 |
ReturnToStdWhenVisit | 字符串 | 否 | false | 指定Object轉為非標準存儲后,再次訪問時是否將Object轉為標準存儲。只有當IsAccessTime設置為true時才有效。取值如下:
說明 在OSS ON云盒使用場景中,不支持使用此選項。 父節(jié)點:Transition或NoncurrentVersionTransition。 |
AllowSmallFile | 字符串 | 否 | false | 基于最后一次訪問時間設置生命周期規(guī)則時,指定是否將小于64 KB的Object轉儲為低頻、歸檔、冷歸檔文件類型。取值如下:
父節(jié)點:Transition或NoncurrentVersionTransition。 |
Filter | 容器 | 否 | 不涉及 | 本條排除規(guī)則的條件參數容器,至多一個,可置空。 父節(jié)點:Rule 子節(jié)點:Not 說明 在OSS ON云盒使用場景中,不支持使用此選項。 |
Not | 容器 | 否 | 不涉及 | 如果Object滿足該條件,則跳過本條規(guī)則的匹配。如果配置了Filter,則Filter下必須有且只有一個Not節(jié)點。 父節(jié)點:Filter 子節(jié)點:Prefix、Tag 說明 在OSS ON云盒使用場景中,不支持使用此選項。 |
Prefix | 字符串 | 是 | tmp/not/ | 本條排除規(guī)則所適用的Object前綴。不可為空。
父節(jié)點:Not 子節(jié)點:無 |
Tag | 容器 | 否 | 不涉及 | 本條排除規(guī)則所適用的Object標簽,至多一個,可置空。 |
響應頭
此接口僅涉及公共響應頭。更多信息,請參見公共響應頭(Common Response Headers)。
示例
請求示例
示例1:基于最后一次修改時間策略僅執(zhí)行轉換文件存儲類型操作
以下示例用于指定Bucket中前綴為log的文件在距離最后一次修改時間30天后轉為低頻訪問類型。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix>log/</Prefix>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>IA</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
示例2:基于最后一次修改時間策略僅執(zhí)行刪除文件操作
以下示例用于指定Bucket中前綴為log的文件在距離最后一次修改時間90天后刪除。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix>log/</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>90</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
示例3:基于最后一次修改時間執(zhí)行轉換文件存儲類型以及刪除操作
以下規(guī)則用于指定Bucket中前綴為log的文件在距離最后一次修改時間30天后轉為低頻訪問類型,60天后轉為歸檔類型,3600天后刪除。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix>log/</Prefix>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>IA</StorageClass>
</Transition>
<Transition>
<Days>60</Days>
<StorageClass>Archive</StorageClass>
</Transition>
<Expiration>
<Days>3600</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
示例4:基于最后一次修改時間執(zhí)行刪除歷史版本文件及清理刪除標記的操作
以下規(guī)則用于指定Bucket中文件成為歷史版本5天后刪除,并在所有歷史版本文件刪除后清理刪除標記。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<Expiration>
<ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>5</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
示例5:基于最后一次修改時間策略限制除指定前綴、標簽以外的文件執(zhí)行轉換存儲類型及刪除操作
以下規(guī)則用于通過NOT元素進行過濾,指定Bucket中除前綴為log、且包含Key為key1,Value為value1標簽的文件外,其余文件在距離最后一次修改時間30天后轉歸檔存儲,100天后刪除。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<Filter>
<Not>
<Prefix>log</Prefix>
<Tag><Key>key1</Key><Value>value1</Value></Tag>
</Not>
</Filter>
<Transition>
<Days>30</Days>
<StorageClass>Archive</StorageClass>
</Transition>
<Expiration>
<Days>100</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
示例6:基于最后一次訪問時間策略轉換文件存儲類型
以下規(guī)則用于指定前綴為log的文件距離最后一次訪問時間30天后轉為低頻訪問類型。且再次訪問前綴為log的文件時,這些文件將轉為標準存儲。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix>log/</Prefix>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>IA</StorageClass>
<IsAccessTime>true</IsAccessTime>
<ReturnToStdWhenVisit>true</ReturnToStdWhenVisit>
</Transition>
</Rule>
</LifecycleConfiguration>
示例7:基于最后一次修改時間執(zhí)行刪除碎片操作
以下規(guī)則用于指定刪除Bucket中生成時間早于30天的碎片。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>rule</ID>
<Prefix>/</Prefix>
<Status>Enabled</Status>
<AbortMultipartUpload>
<Days>30</Days>
</AbortMultipartUpload>
</Rule>
</LifecycleConfiguration>
示例8:基于最后一次修改時間對重疊前綴的Object執(zhí)行刪除操作
以下規(guī)則用于指定dir1/
目錄下的Object距離最后修改時間180天后刪除,子目錄dir1/dir2/
下的Object距離最后修改時間30天后刪除。
PUT /?lifecycle HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2019 15:23:20 GMT
Authorization: OSSWnjl3fg9fdv8fg4b****:Phuu8bBhS8dsff2a****
x-oss-allow-same-action-overlap: true
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>Rule1</ID>
<Prefix>dir1/</Prefix>
<Status>Status</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule2</ID>
<Prefix>dir1/dir2/</Prefix>
<Status>Status</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
如果x-oss-allow-same-action-overlap
取值為false,因后臺檢測到dir1/dir2/
目錄下的Object同時匹配兩條刪除規(guī)則,OSS將拒絕配置以上兩條生命周期規(guī)則,并報錯Overlap for same action type Expiration
。
返回示例
HTTP/1.1 200 OK
x-oss-request-id: 7D3435J59A9812BAD56E
Date: Mon, 6 May 2019 15:23:20 GMT
Content-Length: 0
Connection: keep-alive
Server: AliyunOSS
SDK
此接口對應的各語言SDK如下:
相關文檔
關于生命周期規(guī)則的更多信息,請參見生命周期規(guī)則概述。
錯誤碼
錯誤碼 | HTTP狀態(tài)碼 | 描述 |
InvalidArgument | 400 | 返回此錯誤的可能原因如下:
|
AccessDenied | 403 | 沒有操作權限。僅支持擁有 |
MalforedXML | 400 | Lifecycle XML校驗錯誤均報錯MalformedXML。例如,您對某個Bucket設置基于最后一次訪問時間的生命周期規(guī)則之前,該Bucket未開啟訪問追蹤。 |