更新时间:2024-04-15 GMT+08:00

设置桶的生命周期配置

功能介绍

OBS系统支持指定规则来实现定时删除桶中对象,这就是生命周期配置。典型的应用场景如:

  • 周期性上传的日志文件,可能只需要保留一个星期或一个月,到期后要删除它们。
  • 某些文档在一段时间内经常访问,但是超过一定时间后就可能不会再访问了。这种文档您可能会先选择归档,然后在一定时间后删除。

本接口实现为桶创建或更新生命周期配置信息。

  • 对象生命周期到期以后,对象将会永久删除,无法恢复。

要正确执行此操作,需要确保执行者有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
PUT /?lifecycle HTTP/1.1 
Host: bucketname.obs.region.example.com
Content-Length: length
Date: date
Authorization: authorization
Content-MD5: MD5
<?xml version="1.0" encoding="UTF-8"?> 
<LifecycleConfiguration> 
    <Rule> 
        <ID>id</ID> 
        <Prefix>prefix</Prefix> 
        <Status>status</Status> 
        <Expiration> 
            <Days>days</Days> 
        </Expiration> 
        <NoncurrentVersionExpiration> 
            <NoncurrentDays>days</NoncurrentDays> 
        </NoncurrentVersionExpiration> 
    </Rule> 
</LifecycleConfiguration>

请求消息参数

该请求消息中不使用消息参数。

请求消息头

该请求使用的消息头如下表1所示。

表1 请求消息头

消息头名称

描述

是否必选

Content-MD5

按照RFC 1864标准计算出消息体的MD5摘要字符串,即消息体128-bit MD5值经过base64编码后得到的字符串。

类型:String

示例:n58IG6hfM7vqI4K0vnWpog==

请求消息元素

在此请求中,需要在请求的消息体中配置桶的生命周期配置信息。配置信息以XML格式上传,具体的配置元素如表2描述。

  • 如果桶的多版本是Enabled或者Suspended,那么可以设置NoncurrentVersionExpiration来控制对象的历史版本的生命周期。一个历史版本的生命周期,取决于它成为历史版本的时刻(即被新版本覆盖的那个时刻)和NoncurrentDays。例如NoncurrentDays配置为1的话,表示当一个版本成为历史版本之后,再过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,且对象还有其他版本,则该对象的所有版本维持不变,没有新增和删除,也不会被修改(即无任何变化)。

表2 生命周期配置元素

名称

描述

是否必选

Date

指定OBS对该日期之前的对象执行生命周期规则。日期格式必须为ISO8601的格式,并且为UTC的零点。 例如:2018-01-01T00:00:00.000Z,表示将最后修改时间早于2018-01-01T00:00:00.000Z的对象删除,等于或晚于这个时间的对象不会被删除。

类型:String

父节点:Expiration

如果没有Days元素,则必选

Days

指定生命周期规则在对象最后更新过后多少天生效(仅针对对象的最新版本)。

类型:Integer

父节点:Expiration

如果没有Date元素,则必选

Expiration

生命周期配置中表示过期时间的Container(仅针对对象的最新版本)。

类型:XML

子节点:Date或Days

父节点:Rule

ID

一条Rule的标识,由不超过255个字符的字符串组成。

类型:String

父节点:Rule

LifecycleConfiguration

生命周期配置Rule的Container。可以配置多条Rule,但需保证整个配置消息体总大小不超过20KB。

类型:XML

子节点:Rule

父节点:无

NoncurrentDays

表示对象在成为历史版本之后第几天时规则生效(仅针对历史版本)。

类型:Integer

父节点:NoncurrentVersionExpiration

如果有NoncurrentVersionExpiration元素,则必选

NoncurrentVersionExpiration

生命周期配置中表示历史版本过期时间的Container。您可以将该动作设置在已启用多版本(或暂停)的桶,来让系统删除对象的满足特定生命周期的历史版本(仅针对历史版本)。

类型:XML

子节点:NoncurrentDays

父节点:Rule

Prefix

对象名前缀,用以标识哪些对象可以匹配到当前这条Rule。

类型:String

父节点:Rule

约束:

  1. 当按前缀配置时,如果指定的前缀名与某条已配置的生命周期规则指定的前缀名存在包含关系,OBS会将两条规则视为同一条,而禁止您配置本条规则。例如,系统中已存在指定前缀名为“abc”的规则,则不允许再配置指定前缀以“abc”字段开头的规则。
  2. 如果已存在按前缀配置的生命周期规则,则不允许再新增配置到整个桶的规则。

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
PUT /?lifecycle HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.example.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>  
    <Prefix>test/</Prefix>  
    <Status>Enabled</Status>  
    <Expiration> 
      <Days>70</Days> 
    </Expiration>  
    <NoncurrentVersionExpiration> 
      <NoncurrentDays>70</NoncurrentDays> 
    </NoncurrentVersionExpiration>
  </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