设置桶的生命周期配置
功能介绍
OBS系统支持指定规则来实现定时删除或迁移桶中对象,这就是生命周期配置。典型的应用场景如:
- 周期性上传的日志文件,可能只需要保留一个星期或一个月,到期后要删除它们。
- 某些文档在一段时间内经常访问,但是超过一定时间后就可能不会再访问了。这种文档您可能会先选择归档,然后在一定时间后删除。
- 桶的最低转低频访问和转归档的时间可以配置,取值范围为24~8640。
本接口实现为桶创建或更新生命周期配置信息。
- 对象生命周期到期以后,对象将会永久删除,无法恢复。
- 归档存储和深度归档存储不支持多AZ,因此不支持使用生命周期的存储类别转换功能,将多AZ的桶或对象转化为归档或深度归档存储。
要正确执行此操作,需要确保执行者有PutLifecycleConfiguration权限。默认情况下只有桶的所有者可以执行此操作,也可以通过设置桶策略或用户策略授权给其他用户。
生命周期配置实现了定时删除对象和定时迁移对象的功能,所以如果想要阻止用户删除或迁移对象,以下几项操作的权限都应该被禁止:
- DeleteObject
- DeleteObjectVersion
- PutLifecycleConfiguration
如果想要阻止用户管理桶的生命周期配置,应该禁止PutLifecycleConfiguration权限。
请求消息样式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
PUT /?lifecycle HTTP/1.1 Host: bucketname.obs.cn-north-4.myhuaweicloud.com Content-Length: length Date: date Authorization: authorization Content-MD5: MD5 <?xml version="1.0" encoding="UTF-8"?> <LifecycleConfiguration> <Rule> <ID>id</ID> <Filter> <And> <Prefix>prefix</Prefix> <Tag><Key>key1</Key><Value>value1</Value></Tag> <Tag><Key>key2</Key><Value>value2</Value></Tag> </And> </Filter> <Status>status</Status> <Expiration> <Days>days</Days> </Expiration> <NoncurrentVersionExpiration> <NoncurrentDays>days</NoncurrentDays> </NoncurrentVersionExpiration> <Transition> <Days>30</Days> <StorageClass>WARM</StorageClass> </Transition> <Transition> <Days>60</Days> <StorageClass>COLD</StorageClass> </Transition> <NoncurrentVersionTransition> <NoncurrentDays>30</NoncurrentDays> <StorageClass>WARM</StorageClass> </NoncurrentVersionTransition> <NoncurrentVersionTransition> <NoncurrentDays>60</NoncurrentDays> <StorageClass>COLD</StorageClass> </NoncurrentVersionTransition> </Rule> </LifecycleConfiguration> |
请求消息参数
该请求消息中不使用消息参数。
请求消息头
该请求使用的消息头如下表1所示。
请求消息元素
在此请求中,需要在请求的消息体中配置桶的生命周期配置信息。配置信息以XML格式上传,具体的配置元素如表2描述。
- 如果桶的多版本是Enabled或者Suspended,那么可以设置NoncurrentVersionTransition或NoncurrentVersionExpiration来控制对象的历史版本的生命周期。一个历史版本的生命周期,取决于它成为历史版本的时刻(即被新版本覆盖的那个时刻)和NoncurrentDays。对于删除来说,例如NoncurrentDays配置为1的话,表示当一个版本成为历史版本之后,再过1天才能删除。对象A的版本V1创建于1号,5号的时候又上传新的版本V2,此时V1成为历史版本,那么再过1天,7号的0点,V1就过期了。如果该版本不满足删除,迁移配置NoncurrentDays为1,StorageClass为WARM的话,表示当一个版本成为历史版本之后,再过1天转为低频访问对象。对象A的版本V1创建于1号,5号的时候又上传新的版本V2,此时V1成为历史版本,那么再过1天,7号的0点,V1就会迁移成低频访问对象了。(备注:对象过期后被删除或对象迁移的时间可能会有一定的延迟,一般不超过48小时。)
- 如果桶的多版本是Enabled或者Suspended,且最新版本对象满足Expiration规则时的处理:
- 桶当前的多版本状态为Enabled:
如果对象的最新版本不是deletemarker,则该对象会产生一个新的deletemarker;
如果最新版本是deletemarker,且该对象只有这一个版本,则这个版本会被删除;
如果最新版本是deletemarker,且对象还有其他版本,则该对象的所有版本维持不变,没有新增和删除,也不会被修改(即无任何变化)。
- 桶当前的多版本状态为Suspended:
如果对象的最新版本不是deletemarker,且版本不是null版本,则会产生一个新的null版本的deletemarker;
如果对象的最新版本不是deletemarker,且版本是null版本,则这个null版本会被新产生的null版本的deletemarker覆盖;
如果最新版本是deletemarker,且该对象只有这一个版本,则这个版本会被删除;
如果最新版本是deletemarker,且对象还有其他版本,则该对象的所有版本维持不变,没有新增和删除,也不会被修改(即无任何变化)。
- 桶当前的多版本状态为Enabled:
- 如果桶的多版本是Enabled或者Suspended,且最新版本对象满足Transition规则时的处理:
- 如果对象的最新版本是deletemarker,则这个版本不被迁移;
- 如果最新版本不是deletemarker,且该对象满足迁移条件,则这个版本会被迁移。
名称 |
描述 |
是否必选 |
---|---|---|
Date |
指定OBS对该日期之前的对象执行生命周期规则。日期格式必须为ISO8601的格式,并且为UTC的零点。 例如:2018-01-01T00:00:00.000Z,表示将最后修改时间早于2018-01-01T00:00:00.000Z的对象删除或转换成其他存储类型,等于或晚于这个时间的对象不会被删除或转储。 类型:String 父节点:Expiration, Transition |
当对象转储时,如果没有Days元素,则必选; 当删除对象时,如果没有Days或ExpiredObjectDeleteMarker元素,则必选。 |
Days |
指定生命周期规则在对象最后更新过后多少天生效(仅针对对象的最新版本)。 类型:Integer 父节点:Expiration, Transition |
当对象转储时,如果没有Date元素,则必选; 当删除对象时,如果没有Date或ExpiredObjectDeleteMarker元素,则必选。 |
ExpiredObjectDeleteMarker |
表示是否删除过期删除标记,可以配置true和false。当配置true时,生命周期才会删除,当配置false时,不会删除。如果生命周期规则里配置了tag时,不可配置该规则。 类型:Boolean 父节点:Expiration |
如果没有Days或Date元素,则必选。 |
StorageClass |
表示对象将被修改成存储级别。 类型:String 取值范围: WARM、COLD或DEEP_ARCHIVE 父节点:Transition, NoncurrentVersionTransition |
如果有Transition或NoncurrentVersionTransition元素,则必选 |
Transition |
生命周期配置中表示迁移时间和迁移后对象存储级别的元素(仅针对对象的最新版本) 类型:XML 子节点:Date或Days,StorageClass 父节点:Rule |
如果没有NoncurrentVersionTransition, Expiration, NoncurrentVersionExpiration, AbortIncompleteMultipartUpload则必选 |
Expiration |
生命周期配置中表示过期时间的Container(仅针对对象的最新版本)。 类型:XML 子节点:Date或Days或ExpiredObjectDeleteMarker 父节点:Rule |
如果没有Transition, NoncurrentVersionTransition, NoncurrentVersionExpiration, AbortIncompleteMultipartUpload则必选 |
ID |
一条Rule的标识,由不超过255个字符的字符串组成。 类型:String 父节点:Rule |
否 |
LifecycleConfiguration |
生命周期配置Rule的Container。可以配置多条Rule,但需保证整个配置消息体总大小不超过20KB。 类型:XML 子节点:Rule 父节点:无 |
是 |
NoncurrentDays |
表示对象在成为历史版本之后第几天时规则生效(仅针对历史版本)。 类型:Integer 父节点:NoncurrentVersionExpiration, NoncurrentVersionTransition |
如果有NoncurrentVersionExpiration或NoncurrentVersionTransition元素,则必选 |
NoncurrentVersionTransition |
生命周期配置中表示对象的历史版本迁移时间和迁移后对象存储级别的元素。 类型:XML 子节点:NoncurrentDays, StorageClass 父节点:Rule |
如果没有Transition, Expiration, NoncurrentVersionExpiration, AbortIncompleteMultipartUpload则必选 |
NoncurrentVersionExpiration |
生命周期配置中表示历史版本过期时间的Container。您可以将该动作设置在已启用多版本(或暂停)的桶,来让系统删除对象的满足特定生命周期的历史版本(仅针对历史版本)。 类型:XML 子节点:NoncurrentDays 父节点:Rule |
否 |
AbortIncompleteMultipartUpload |
生命周期配置中表示未合并的多段任务(碎片)的过期属性Container。 类型:XML 子节点:DaysAfterInitiation 父节点:Rule
说明:
AbortIncompleteMultipartUpload不支持基于标签(Tag)的筛选条件。 |
如果没有Transition, Expiration, NoncurrentVersionExpiration, NoncurrentVersionTransition则必选 |
DaysAfterInitiation |
指定未合并的多段任务(碎片)的生命周期规则,在多段任务初始化过后多少天生效。 类型:Integer 父节点:AbortIncompleteMultipartUpload |
如果有AbortIncompleteMultipartUpload则必选 |
Filter |
指定具体的匹配规则,生命周期将应用于桶内匹配到的对象。 可以按照对象名前缀、对象标签或者二者的组合(Filter中如果包含多个筛选条件,需要使用逻辑AND组合筛选条件)筛选对象。 类型:XML 父节点:Rule |
Rule的同级子节点, 可以是Filter或者Prefix,二者只能选其一,不能同时出现。但是Prefix可以作为Filter的子节点。 |
And |
表示当前多条匹配规则逻辑且的关系。 用于对象名前缀和对象标签二者的组合或多个对象标签组合来匹配对象。 类型:XML 父节点:Filter 约束:
|
存在Prefix和Tag的多条匹配规则时,则必选 |
Tag |
标签元素,用以标识哪些被打上该标签对象,可以匹配到当前这条Rule。 类型:Container 父节点:Filter或And 约束:
|
否 |
Key |
Tag的键名 类型:String 父节点:Tag 约束: 键名(Key)区分大小写且必须唯一,不能为空且不能超过128个字符,不允许使用=*<>\,|/?!;字符。 |
存在Tag时,则必选 |
Value |
Tag的键值 类型:String 父节点:Tag 约束: 键值(Value)区分大小写且可以为空,不能超过255个字符,不允许使用=*<>\,|?!;字符。 |
存在Tag时,则必选 |
Prefix |
对象名前缀,用以标识哪些对象可以匹配到当前这条Rule。 类型:String 父节点:Rule 约束:
|
是 |
Rule |
具体某一条生命周期配置的Container。 类型:Container 父节点:LifecycleConfiguration |
是 |
Status |
标识当前这条Rule是否启用。 类型:String 父节点:Rule 有效值:Enabled,Disabled |
是 |
响应消息样式
1 2 3 |
HTTP/1.1 status_code Date: date Content-Length: length |
响应消息头
该请求的响应消息使用公共消息头,具体请参考表1。
响应消息元素
该请求的响应消息不带消息元素。
错误响应消息
无特殊错误,所有错误已经包含在表2中。
请求示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
PUT /?lifecycle HTTP/1.1 User-Agent: curl/7.29.0 Host: examplebucket.obs.cn-north-4.myhuaweicloud.com Accept: */* Date: WED, 01 Jul 2015 03:05:34 GMT Authorization: OBS H4IPJX0TQTHTHEBQQCEC:DpSAlmLX/BTdjxU5HOEwflhM0WI= Content-MD5: ujCZn5p3fmczNiQQxdsGaQ== Content-Length: 919 <?xml version="1.0" encoding="utf-8"?> <LifecycleConfiguration> <Rule> <ID>delete-2-days</ID> <Filter> <And> <Prefix>prefix</Prefix> <Tag><Key>key1</Key><Value>value1</Value></Tag> <Tag><Key>key2</Key><Value>value2</Value></Tag> </And> </Filter> <Status>Enabled</Status> <Expiration> <Days>70</Days> </Expiration> <NoncurrentVersionExpiration> <NoncurrentDays>70</NoncurrentDays> </NoncurrentVersionExpiration> <Transition> <Days>30</Days> <StorageClass>WARM</StorageClass> </Transition> <Transition> <Days>60</Days> <StorageClass>COLD</StorageClass> </Transition> <NoncurrentVersionTransition> <NoncurrentDays>30</NoncurrentDays> <StorageClass>WARM</StorageClass> </NoncurrentVersionTransition> <NoncurrentVersionTransition> <NoncurrentDays>60</NoncurrentDays> <StorageClass>COLD</StorageClass> </NoncurrentVersionTransition> </Rule> </LifecycleConfiguration> |
响应示例
1 2 3 4 5 6 |
HTTP/1.1 200 OK Server: OBS x-obs-request-id: BF26000001643670AC06E7B9A7767921 x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSvK6z8HV6nrJh49gsB5vqzpgtohkiFm Date: WED, 01 Jul 2015 03:05:34 GMT Content-Length: 0 |
请求示例:基于最后一次修改时间策略仅执行转换文件存储类型操作
PUT /?lifecycle HTTP/1.1 Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4= User-Agent: curl/7.29.0 Host: examplebucket.obs.region.myhuaweicloud.com Date: WED, 01 Jul 2015 02:37:22 GMT Content-Type: application/xml Content-MD5: b67aDumlm/b+5iev6+sRYw== <LifecycleConfiguration> <Rule> <ID>delete-2-days</ID> <Prefix>test/</Prefix> <Status>Enabled</Status> <Transition> <Days>30</Days> <StorageClass>WARM</StorageClass> </Transition> <Transition> <Days>60</Days> <StorageClass>COLD</StorageClass> </Transition> </Rule> </LifecycleConfiguration>
响应示例:基于最后一次修改时间策略仅执行转换文件存储类型操作
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSZbDadL1f7fYU44bvRLvc0l6D10+wzG x-obs-request-id: 0000018A2BCBB3ABD3046B99E3ED2E30 Server: OBS Content-Length: 0 Date: WED, 01 Jul 2015 02:37:22 GMT
请求示例:基于最后一次修改时间策略仅执行删除文件操作
PUT /?lifecycle HTTP/1.1 Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4= User-Agent: curl/7.29.0 Host: examplebucket.obs.region.myhuaweicloud.com Date: WED, 01 Jul 2015 02:37:22 GMT Content-Type: application/xml Content-MD5: tt0IizQ7YSTFtMJ3sie6qA== <LifecycleConfiguration> <Rule> <ID>delete-2-days</ID> <Prefix>test/</Prefix> <Status>Enabled</Status> <Expiration> <Days>70</Days> </Expiration> </Rule> </LifecycleConfiguration>
响应示例:基于最后一次修改时间策略仅执行删除文件操作
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSfpG6nArWY7cM7rB3+GbvO13XJPx9g4 x-obs-request-id: 0000018A2BD6BB02D30426F6E4A1FBA2 Server: OBS Content-Length: 0 Date: WED, 01 Jul 2015 02:37:22 GMT
请求示例:基于最后一次修改时间执行转换文件存储类型以及删除操作
PUT /?lifecycle HTTP/1.1 Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4= User-Agent: curl/7.29.0 Host: examplebucket.obs.region.myhuaweicloud.com Date: WED, 01 Jul 2015 02:37:22 GMT Content-Type: application/xml Content-MD5: 9CJYqNUbXEVhhawEx0ICRw== <LifecycleConfiguration> <Rule> <ID>delete-2-days</ID> <Prefix>test/</Prefix> <Status>Enabled</Status> <Expiration> <Days>70</Days> </Expiration> <Transition> <Days>30</Days> <StorageClass>WARM</StorageClass> </Transition> <Transition> <Days>60</Days> <StorageClass>COLD</StorageClass> </Transition> </Rule> </LifecycleConfiguration>
响应示例:基于最后一次修改时间执行转换文件存储类型以及删除操作
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSMYkLcGTyUsgSJe2Rdsg2P8JwMsJV6n x-obs-request-id: 0000018A2BDA0816D2877F5D5622F0BA Server: OBS Content-Length: 0 Date: WED, 01 Jul 2015 02:37:22 GMT
请求示例:基于最后一次修改时间执行删除历史版本文件及清理删除标记的操作
PUT /?lifecycle HTTP/1.1 Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4= User-Agent: curl/7.29.0 Host: examplebucket.obs.region.myhuaweicloud.com Date: WED, 01 Jul 2015 02:37:22 GMT Content-Type: application/xml Content-MD5: SGAUB+2hLUAWV5IJ69xU+Q== <LifecycleConfiguration> <Rule> <ID>delete-2-days</ID> <Prefix>test/</Prefix> <Status>Enabled</Status> <NoncurrentVersionExpiration> <NoncurrentDays>70</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
响应示例:基于最后一次修改时间执行删除历史版本文件及清理删除标记的操作
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSZbDadL1f7fYU44bvRLvc0l6D10+wzG x-obs-request-id: 0000018A2BCBB3ABD3046B99E3ED2E30 Server: OBS Content-Length: 0 Date: WED, 01 Jul 2015 02:37:22 GMT
请求示例:执行删除碎片操作
PUT /?lifecycle HTTP/1.1 Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4= User-Agent: curl/7.29.0 Host: examplebucket.obs.region.myhuaweicloud.com Date: WED, 01 Jul 2015 02:37:22 GMT Content-Type: application/xml Content-MD5: PBgGafte2ACjUwYxdJA47Q== <LifecycleConfiguration> <Rule> <ID>delete-2-days</ID> <Prefix>test/</Prefix> <Status>Enabled</Status> <AbortIncompleteMultipartUpload> <DaysAfterInitiation>10</DaysAfterInitiation> </AbortIncompleteMultipartUpload> </Rule> </LifecycleConfiguration>
响应示例:执行删除碎片操作
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCTlN+glNMVGtTicAnVXkTVDjR5xKSLuH x-obs-request-id: 0000018A2BE86742D2C6989CA79E136C Server: OBS Content-Length: 0 Date: WED, 01 Jul 2015 02:37:22 GMT