此操作用来设置Bucket生命周期规则。只有根用户和具有PUT Bucket Lifecycle权限的子用户才能执行此操作。
通过设置存储桶的生命周期规则,可以:
- 删除与生命周期规则匹配的文件:当文件的生命周期到期时,OOS会异步删除它们。生命周期中配置的到期时间和实际删除时间之间可能会有一段延迟。但文件到期被删除后,用户将不需要为到期的文件付费。OOS删除到期文件后,会在Bucket log中记录一条日志,操作项是"OOS.EXPIRE.OBJECT"。
- 将与生命周期规则匹配的文件由标准存储转换为低频访问存储:可以根据需要设置生命周期规则从文件最后一次修改时间生效,还是从文件最后一次访问时间生效。OOS转换存储类型为低频访问存储后,会在Bucket log中记录一条日志,操作项是"OOS.TRANSITION_SIA.OBJECT"。
注意
如果文件的生命周期规则设置的是到期后删除,文件到期后将被永久删除,无法恢复。
如果Bucket内的生命周期规则正在执行时被修改配置,则修改后的配置并不立即生效,需等原生命周期规则执行完成后才能生效。
如果Bucket没有配置过生命周期规则,执行该操作将创建新的生命周期规则。如果Bucket已存在生命周期规则,则执行此操作将覆盖原有规则。
每个Bucket最多创建1000条生命周期规则。
同一Bucket,同一类型(到期删除或者到期转成低频访问存储)的生命周期规则不能存在叠加前缀,例如已创建到期删除文件的生命周期规则的前缀是ABC,则无法再创建前缀为ABCD或AB或A的到期删除文件的生命周期规则。
当用户为Bucket设置了生命周期规则,这些规则将同时应用于已有文件和后续新创建的文件。例如,用户今天增加了一个生命周期,指定某些前缀的文件30天后过期,那么OOS将会将满足条件的30天前创建的文件都加入到待删除队列中。
OOS通过将文件的最后一次修改时间或最后一次访问时间,加上生命周期时间来计算到期时间,并且将时间近似到下一天的GMT零点时间。例如基于创建时间设置生命周期:一个文件于GMT 2016年1月15日10:30创建,生命周期为3天,那么文件的到期时间是GMT 2016年1月19日00:00。当重写一个文件时,OOS将以最后更新时间为准,来重新计算该文件的到期时间。
可以通过GET Object、HEAD Object查询文件的到期时间。
请求语法
PUT /?lifecycle HTTP/1.1
Host: BucketName.oos-cn.ctyunapi.cn
Date: date
Content-MD5: MD5
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<ID>UniqueIdentifier</ID>
<Prefix>Prefix</Prefix>
<Status>LifecycleStatus</Status>
<Expiration>
<Days>NumberOfDays</Days>
</Expiration>
<Transition>
<Days>NumberOfDays</Days>
<IsAccessTime>IsAccessTime</IsAccessTime>
<StorageClass>StorageClass</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
请求头
名称 | 描述 | 是否必须 |
---|---|---|
Content-MD5 | 数据的base64编码的128位MD5。此请求头必填,以便校验数据的完整性。 | 是 |
请求参数
名称 描述 是否必须 LifecycleConfiguration 生命周期规则容器,最多包含1000个规则。
类型:容器。
子节点:Rule。
是 Rule 配置一条生命周期规则的容器。
类型:容器。
子节点:ID、Prefix、Status、Expiration、Transition。
父节点:LifecycleConfiguration。
是 ID 规则的唯一标识。
类型:字符串。
取值:1~255个字符。
说明如果ID不填写,系统会随机生成一个48字节长度的ID。
父节点:Rule。
否 Prefix 指定使用生命周期规则的文件前缀。只有匹配文件前缀的文件才能被该规则影响,且对于同一Bucket,同一类型的生命周期规则的前缀不可重叠。如果prefix为空,则默认生命周期规则匹配整个存储桶。
类型:字符串。
取值:0~1024个字符。
父节点:Rule。
是 Status 指定生命周期规则的状态。
类型:字符串。
取值:
Enabled:生命周期规则生效。
Disabled:生命周期规则不生效,OOS执行时会忽略该条规则。
父节点:Rule。
是 Expiration 指定生命周期规则的过期时间容器。
类型:容器。
父节点:Rule。
子节点:Days或Date。
Expiration和Transition至少包含1个。 Transition 指定生命周期规则的转换存储类型。
类型:容器。
父节点:Rule。
子节点:Days或Date、StorageClass。
Expiration和Transition至少包含1个。 Days 指定生命周期规则在匹配文件最后一次修改时间或最后一次访问时间多少天后生效。
说明当请求中存在IsAccessTime参数,且IsAccessTime取值为true时,此参数表示生命周期规则在距离Object最后一次访问多少天后生效。
注意如果过期时间和转换时间同时配置,过期时间需要晚于转换时间。
类型:整型。
取值:大于0的正整数。
父节点:Expiration或Transition。
Days和Date二选一。 IsAccessTime 指定是否基于最后一次访问时间匹配规则。
注意只有配置Days时才生效。
类型:布尔。
取值:
true:生命周期规则匹配文件的最后一次访问时间。当基于最后一次访问时间匹配规则时,文件只支持从标准存储转储为低频访问存储。
false:生命周期规则匹配文件的最后一次修改时间。
默认值为false。
父节点:Transition。
否 Date 指定生命周期规则生效日期,OOS对最后一次修改时间在此日期之前的文件执行生命周期规则。
取值:日期格式必须为ISO8601格式,并且为UTC的零点。例如:2002-10-11T00:00:00.000Z。
类型:字符串。
父节点:Expiration或Transition。
Days和Date二选一。 StorageClass 指定文件转换的存储类型。
类型:字符串。
取值:STANDARD_IA:低频访问存储。
父节点:Transition。
Transition已设置时,必填。
请求示例1
下面的生命周期只包含一个规则,这个规则指定所有以logs/为前缀的文件将在创建后的30天过期。因为生命周期规则的状态是Enabled,OOS会每隔一段时间来评估这个规则,删除过期的文件。
PUT /?lifecycle HTTP/1.1
Host: example-bucket.oos-cn.ctyunapi.cn
Date: Tue, 13 Dec 2011 17:54:50 GMT
Content-MD5: 8dYiLewFWZyGgV2Q5FNI4W==
Content-Length: 207
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<ID>delete-logs-in-30-days-rule</ID>
<Prefix>logs</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
响应示例1
HTTP/1.1 200 OK
x-amz-request-id: 8911108cf1b04a9234a79aa99eabadb3727478686a6c6e7072
Date: Tue, 13 Dec 2011 19:14:41 GMT
Server: CTYUN
请求示例2
指定存储文件在创建10天后转换为低频访问存储,创建20天后删除。
PUT /?lifecycle HTTP/1.1
Host: example-bucket.oos-cn.ctyunapi.cn
Date: Mon, 29 Jul 2019 05:08:31 GMT
Content-Type: application/xml
Content-MD5: ouPJihB832ZHNLZNyl2Ccw==
Content-Length: 175
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<Prefix>logs</Prefix>
<Status>Enabled</Status>
<Transition>
<Days>10</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<Expiration>
<Days>20</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
响应示例2
HTTP/1.1 200 OK
x-amz-request-id: 08979294ca514b044ec1b4c3b8c5c7cd8c8e91828486888a8c
Date: Mon, 29 Jul 2019 05:10:33 GMT
Server: CTYUN
请求示例3
该示例生命周期包含2个规则,第一个规则指定所有以logs/为前缀的文件将在创建后的30天过期。第二个规则指定所有以documents/为前缀的文件将在创建后的365天过期,但第二个规则的状态是Disabled,即不生效。
PUT /?lifecycle HTTP/1.1
Host: example-bucket.oos-cn.ctyunapi.cn
Date: Tue, 13 Dec 2011 17:54:50 GMT
Content-MD5: 8dYiLewFWZyGgV2Q5FNI4W==
Content-Length: 413
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<ID>delete-logs-rule</ID>
<Prefix>logs/</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
<Rule>
<ID>delete-documents-rule</ID>
<Prefix>documents/</Prefix>
<Status>Disabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
响应示例3
HTTP/1.1 200 OK
x-amz-request-id: 8b08216804aa4f5569e3e5dcdee4a3a5ad999b9d9fa1a3a5a7
Date: Tue, 13 Dec 2011 19:14:41 GMT
Server: CTYUN
请求示例4
下面规则指定所有文件将在创建后的3650天被删除。
注意当指定空的前缀时,规则将对Bucket内的所有文件生效。OOS将会删除满足此规则的所有文件。
PUT /?lifecycle HTTP/1.1
Host: example-bucket.oos-cn.ctyunapi.cn
Date: Tue, 13 Dec 2011 17:54:50 GMT
Content-MD5: 8dYiLewFWZyGgV2Q5FNI4W==
Content-Length: 226
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<ID>10 years all objects expire rule </ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
响应示例4
HTTP/1.1 200 OK
x-amz-request-id: bf925f41e4094d0cfc76786f71773638402c2e30323436383a
Date:Tue, 13 Dec 2011 19:14:41 GMT
Server: CTYUN
请求示例5
为前缀是test的文件设置生命周期规则:文件最后一次访问3天后转为低频访问存储。
PUT /?lifecycle HTTP/1.1
Host: example-bucket.oos-cn.ctyunapi.cn
x-amz-content-sha256: UNSIGNED-PAYLOAD
x-amz-date: 20230821T092414Z
Content-MD5: NH5mGrd4Be/Q0EWSuXpfYA==
Connection: keep-alive
Content-Length: 324
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<ID>test_lifecycle_1</ID>
<Prefix>test</Prefix>
<Status>Enabled</Status>
<Transition>
<Days>3</Days>
<IsAccessTime>true</IsAccessTime>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
响应示例5
HTTP/1.1 200 OK
Date: Mon, 21 Aug 2023 09:24:14 GMT
x-amz-request-id: cbc195a82f344b0b0b574e5f656265446771535558535c6849
Content-Length: 0
Server: CTYUN
请求示例6
在设置多个规则时,请注意各规则之间不要互相冲突。比如,下面的生命周期中配置了一个规则,指定所有以documents为前缀的文件在30天后过期。而另一个规则指定所有以documents/2011为前缀的文件在365天过期。在这种情况下,OOS将返回错误信息。
PUT /?lifecycle HTTP/1.1
Host: docs.oos-cn.ctyunapi.cn
Date: Tue, 13 Dec 2011 17:54:50 GMT
Content-MD5: 8dYiLewFWZyGgV2Q5FNI4W==
Content-Length: 226
Authorization: SignatureValue
<LifecycleConfiguration>
<Rule>
<ID>111</ID>
<Prefix>documents</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
<Rule>
<ID>222</ID>
<Prefix>documents/2011</Prefix>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>