PutBucketLifecycle接口用于设置存储空间(Bucket)的生命周期规则。生命周期规则开启后,OSS将按照配置规则,定期自动删除与规则相匹配的文件(Object)。

注意事项

调用PutBucketLifecycle接口时,有如下注意事项:

  • 只有Bucket的拥有者才能发起PutBucketLifecycle请求。
  • 如果Bucket此前没有设置过生命周期规则,此操作会创建一个新的生命周期规则;如果Bucket此前设置过生命周期规则,此操作会覆写先前的规则配置。
  • 由于PutBucketLifecycle是覆盖语义,当您需要追加生命周期规则时,请先调用GetBucketLifecycle接口获取当前生命周期规则配置,然后追加新的生命周期规则配置,最后调用PutBucketLifecycle接口更新生命周期规则配置。
  • PutBucketLifecycle操作可以对Object以及Part(以分片方式上传,但最后未提交的分片)设置过期时间。

请求语法

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>

请求元素

名称 类型 是否必选 描述
CreatedBeforeDate 字符串 Days和CreatedBeforeDate二选一 指定一个日期,OSS会对最后更新时间早于该日期的数据执行生命周期规则。日期必须服从ISO8601的格式,并总是UTC的零点。 例如:2002-10-11T00:00:00.000Z,表示将最后更新时间早于2002-10-11T00:00:00.000Z 的Object删除或转换成其他存储类型,等于或晚于这个时间的Object不会被删除或转储。

父节点:Expiration或者AbortMultipartUpload

Days 正整数 Days和CreatedBeforeDate二选一 指定生命周期规则在距离Object最后更新多少天后生效。

父节点:Expiration

Expiration 容器 指定Object生命周期规则的过期属性。
说明 对于受版本控制的Bucket,此元素仅操作于Object的当前版本。

子节点:Days、CreatedBeforeDate或ExpiredObjectDeleteMarker

父节点:Rule

AbortMultipartUpload 容器 指定未完成分片上传的过期属性。

子节点:Days或CreatedBeforeDate

父节点:Rule

ID 字符串 标识规则的唯一ID。最多由255个字节组成。如没有指定,或者该值为空时,OSS会自动生成一个唯一ID。

子节点:无

父节点:Rule

LifecycleConfiguration 容器 Lifecycle配置的容器,最多可容纳1000条规则。

子节点:Rule

父节点:无

Prefix 字符串 指定规则所适用的前缀(Prefix)。Prefix不可重复。
  • 若指定了Prefix,则表示此规则仅适用于Bucket中与Prefix匹配的Object。
  • 若Prefix置空,则表示此规则适用于Bucket中的所有Object。

子节点:无

父节点:Rule

Rule 容器 标识一条规则。
  • 不支持Archive Bucket创建转储规则。
  • Object设置过期时间必须大于转储为IA或者Archive存储类型的时间。

子节点:ID、Prefix、Status、Expiration

父节点:LifecycleConfiguration

Status 字符串 如果值为Enabled,那么OSS会定期执行该规则;如果为Disabled,那么OSS会忽略该规则。

父节点:Rule

有效值:Enabled、Disabled

StorageClass 字符串 如果父节点Transition或NoncurrentVersionTransition已设置,则为必选 指定Object转储的存储类型。
说明 IA Bucket中的Object可以转储为Archive存储类型,但不支持转储为Standard存储类型。

取值:IA、Archive

父节点:Transition

Transition 容器 指定Object在有效生命周期中,OSS何时将Object转储为IA、Archive存储类型 。
说明 Standard Bucket中的Standard Object可以转储为IA、Archive存储类型,但转储Archive存储类型的时间必须比转储IA存储类型的时间长。例如Transition IA设置Days为30,Transition Archive设置Days必须大于30。

父节点:Rule

子节点:Days, CreatedBeforeDate, Storageclass
说明 Days或CreatedBeforeDate只能二选一。
Tag 容器 指定规则所适用的对象标签,可设置多个。

父节点:Rule

子节点:Key, Value

Key 字符串 若父节点Tag已设置,则为必需 Tag Key

父节点:Tag

Value 字符串 若父节点Tag已设置,则为必需 Tag Value

父节点:Tag

NoncurrentDays 字符串 若父节点NoncurrentVersionTransition或NoncurrentVersionExpiration已设置,则为必需 指定生命周期规则在Object成为非当前版本多少天后生效。

父节点:NoncurrentVersionTransition、NoncurrentVersionExpiration

NoncurrentVersionTransition 容器 在有效的生命周期规则中,OSS何时将指定Object的非当前版本转储为IA或者Archive存储类型 。
说明 Standard Bucket中的Standard Object可以转储为IA、Archive存储类型,但转储Archive存储类型的时间必须比转储IA存储类型的时间长。例如NoncurrentVersionTransition IA设置Days为30,NoncurrentVersionTransition Archive设置Days必须大于30。

子节点:NoncurrentDays、StorageClass

NoncurrentVersionExpiration 容器 指定Object非当前版本生命周期规则的过期属性。

子节点:NoncurrentDays

ExpiredObjectDeleteMarker 字符串 指定是否自动移除过期删除标记。
取值:true、false
  • true为是
  • false为否

父节点:Expiration

示例

  • 不受版本控制的生命周期配置请求示例
    PUT /?lifecycle HTTP/1.1
    Host: oss-example.oss.aliyuncs.com
    Content-Length: 443
    Date: Thu , 8 Jun 2017 13:08:38 GMT
    Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:PYbzsdWAIWAlMW8luk*****
    <?xml version="1.0" encoding="UTF-8"?>
    <LifecycleConfiguration>
      <Rule>
        <ID>delete objects and parts after one day</ID>
        <Prefix>logs/</Prefix>
        <Status>Enabled</Status>
        <Expiration>
          <Days>1</Days>
        </Expiration>
        <AbortMultipartUpload>
          <Days>1</Days>
        </AbortMultipartUpload>
      </Rule>
      <Rule>
        <ID>transit objects to IA after 30, to Archive 60, expire after 10 years</ID>
        <Prefix>data/</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>
      <Rule>
        <ID>transit objects to Archive after 60 days</ID>
        <Prefix>important/</Prefix>
        <Status>Enabled</Status>
        <Transition>
          <Days>6</Days>
          <StorageClass>Archive</StorageClass>
        </Transition>
      </Rule>
      <Rule>
        <ID>delete created before date</ID>
        <Prefix>backup/</Prefix>
        <Status>Enabled</Status>
        <Expiration>
          <CreatedBeforeDate>2017-01-01T00:00:00.000Z</CreatedBeforeDate>
        </Expiration>
        <AbortMultipartUpload>
          <CreatedBeforeDate>2017-01-01T00:00:00.000Z</CreatedBeforeDate>
        </AbortMultipartUpload>
      </Rule>
      <Rule>
        <ID>r1</ID>
        <Prefix>rule1</Prefix>
        <Tag><Key>xx</Key><Value>1</Value></Tag>
        <Tag><Key>yy</Key><Value>2</Value></Tag>
        <Status>Enabled</Status>
        <Expiration>
          <Days>30</Days>
        </Expiration>
      </Rule>
      <Rule>
        <ID>r2</ID>
        <Prefix>rule2</Prefix>
        <Tag><Key>xx</Key><Value>1</Value></Tag>
        <Status>Enabled</Status>
        <Transition>
          <Days>60</Days>
        <StorageClass>Archive</StorageClass>
        </Transition>
      </Rule>
    </LifecycleConfiguration>            
    返回示例
    HTTP/1.1 200 OK
    x-oss-request-id: 534B371674A4D890*****
    Date: Thu , 8 Jun 2017 13:08:38 GMT
    Content-Length: 0
    Connection: keep-alive
    Server: AliyunOSS
  • 受版本控制的生命周期配置请求示例
    PUT /?lifecycle HTTP/1.1
    Host: oss-example.oss.aliyuncs.com
    Content-Length: 336
    Date: Mon , 6 May 2019 15:23:20 GMT
    Authorization: OSSWnjl3fg9fdv8fg4b8sdf:Phuu8bBhS8dsff2a*****
    <?xml version="1.0" encoding="UTF-8"?>
    <LifecycleConfiguration>
      <Rule>
        <ID>delete example</ID>
        <Prefix>logs/</Prefix>
        <Status>Enabled</Status>
        <Expiration>
          <ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>     
        </Expiration>
        <NoncurrentVersionExpiration>
          <NoncurrentDays>5</NoncurrentDays>
        </NoncurrentVersionExpiration>
        <AbortMultipartUpload>
          <Days>1</Days>
        </AbortMultipartUpload>
      </Rule>
      <Rule>
        <ID>transit example</ID>
        <Prefix>data/</Prefix>
        <Status>Enabled</Status>
        <Transition>
          <Days>30</Days>
          <StorageClass>IA</StorageClass>
        </Transition>
        <NoncurrentVersionTransition>
          <NoncurrentDays>10</NoncurrentDays>
          <StorageClass>IA</StorageClass>
        </NoncurrentVersionTransition>
      </Rule>
    </LifecycleConfiguration>
    返回示例
    HTTP/1.1 200 OK
    x-oss-request-id: 7D3435J59A9812B*****
    Date: Mon , 6 May 2019 15:23:20 GMT
    Content-Length: 0
    Connection: keep-alive
    Server: AliyunOSS

SDK

此接口所对应的各语言SDK如下:

错误码

错误码 HTTP 状态码 描述
AccessDenied 403 没有操作权限。只有Bucket的拥有者才能发起PutBucketLifecycle请求。
InvalidArgument 400
  • OSS支持Standard Bucket中Standard Objects转储为IA、Archive存储类型。Standard Bucket可以针对一个Object同时配置转储IA和Archive存储类型规则,但转储Archive存储类型必须晚于转储IA存储类型的时间。
  • 指定Object的过期时间必须晚于转储为IA或者Archive存储类型的时间。