调用PutBucketLifecycle接口为存储空间(Bucket)设置生命周期规则。生命周期规则开启后,OSS将按照规则中指定的过期时间,自动转换与规则相匹配文件(Object)的存储类型或将其删除。

注意事项

  • 要为存储空间设置生命周期规则,您必须有oss:PutBucketLifecycle权限。具体操作,请参见为RAM用户授权自定义的权限策略
  • 如果未为Bucket设置过生命周期规则,则执行此操作会创建一个新的生命周期规则;如果已为Bucket设置了生命周期规则,则执行此操作会覆写已有的规则配置。
  • PutBucketLifecycle为覆盖语义。当您需要追加生命周期规则时,请先调用GetBucketLifecycle接口获取当前生命周期规则配置,然后追加新的生命周期规则配置,最后调用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>

当您在OSS ON云盒中调用该接口时,您需要将Host替换为云盒Endpoint。更多信息,请参见云盒Endpoint

请求头

此接口仅涉及公共请求头。更多信息,请参见公共请求头(Common Request Headers)

请求元素

名称 类型 是否必选 示例值 描述
LifecycleConfiguration 容器 不涉及 Lifecycle配置的容器,最多支持1000条规则。

子节点:Rule

父节点:无

Rule 容器 不涉及 生命周期规则的容器。Object设置过期时间必须大于转储为IA或者Archive存储类型的时间。

子节点:ID、Prefix、Status、Expiration

父节点:LifecycleConfiguration

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

子节点:无

父节点:Rule

Prefix 字符串 tmp/ 指定规则所适用的前缀(Prefix)。不支持设置相同的Prefix。
  • 如果指定了Prefix,则表示此规则仅适用于Bucket中与Prefix匹配的Object。
  • 如果Prefix置空,则表示此规则适用于Bucket中的所有Object。

子节点:无

父节点:Rule

Status 字符串 Enabled 是否启用规则。取值范围如下:
  • Enabled:表示启用规则,OSS会定期执行该规则。
  • Disabled:表示不启用规则,OSS会忽略该规则。

父节点:Rule

Expiration 容器 不涉及 指定Object的过期属性。 对于已开启版本控制的Bucket,指定的过期时间只对Object当前版本生效。

Object的过期时间必须大于转储为IA或Archive类型的时间。

子节点:Days、CreatedBeforeDate或ExpiredObjectDeleteMarker

父节点:Rule

Days 正整数 Days与CreatedBeforeDate互斥 1 指定生命周期规则在距离Object最后更新多少天后生效。

父节点:Expiration或AbortMultipartUpload

CreatedBeforeDate 字符串 CreatedBeforeDate与Days互斥 2002-10-11T00:00:00.000Z 指定一个日期,OSS会对最后更新时间早于该日期的数据执行生命周期规则。日期格式为yyyy-MM-ddT00:00:00.000Z。

日期需要按照ISO8601标准表示并使用UTC时间,且必须为UTC的零点。

父节点:Expiration或者AbortMultipartUpload

ExpiredObjectDeleteMarker 字符串 true 指定是否自动移除过期删除标记。取值范围如下:
  • true:表示自动移除过期删除标记。当取值为true时,不支持指定DaysCreatedBeforeDate
  • false:表示不会自动移除过期删除标记。当取值为false时,必须指定DaysCreatedBeforeDate

父节点:Expiration

Transition 容器 不涉及 指定Object在有效生命周期中,OSS何时转换Object的存储类型。

Standard Bucket中Standard Object可以转储为IA、Archive或ColdArchive存储类型,但转储Archive存储类型的时间必须比转储IA存储类型的时间长。例如Transition IA设置Days为30,Transition Archive设置Days必须大于30。

父节点:Rule

子节点:Days、CreatedBeforeDate和StorageClass
注意
  • Days或CreatedBeforeDate只能二选一。
  • 在OSS ON云盒使用场景中,不支持使用此选项。

StorageClass 字符串 如果存在父节点Transition或NoncurrentVersionTransition,则必选 IA 指定Object转储的存储类型。取值范围如下:
  • IA:低频访问
  • Archive:归档存储
  • ColdArchive:冷归档存储
注意
  • IA Bucket中的Object可以转储为Archive或者ColdArchive存储类型,但不支持转储为Standard存储类型。
  • 在OSS ON云盒使用场景中,不支持使用此选项。

父节点:Transition

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

子节点:Days或CreatedBeforeDate

父节点:Rule

Tag 容器 不涉及 指定规则所适用的对象标签,可设置多个。

父节点:Rule

子节点:Key、Value

说明

在OSS ON云盒使用场景中,不支持使用此选项。

Key 字符串 如果存在父节点Tag,则必选 TagKey1 对象标签的键。

父节点:Tag

Value 字符串 如果存在父节点Tag,则必选 TagValue1 对象标签的值。

父节点:Tag

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

子节点:NoncurrentDays

NoncurrentVersionTransition 容器 不涉及 在有效的生命周期规则中,OSS何时将指定Object的非当前版本转储为IA或者Archive存储类型。

Standard类型的Object转储为Archive类型的时间必须大于转储为IA类型的时间。

说明

在OSS ON云盒使用场景中,不支持使用此选项。

子节点:NoncurrentDays、StorageClass

NoncurrentDays 字符串 如果存在父节点NoncurrentVersionExpiration或NoncurrentVersionTransition,则必选 10 指定生命周期规则在Object成为非当前版本多少天后生效。

父节点:NoncurrentVersionTransition、NoncurrentVersionExpiration

Filter 容器 不涉及 本条排除规则的条件参数容器,至多一个,可置空。

父节点:Rule

子节点:Not

说明

在OSS ON云盒使用场景中,不支持使用此选项。

Not 容器 不涉及 如果Object满足该条件,则跳过本条规则的匹配。如果配置了Filter,则Filter下必须有且只有一个Not节点。

父节点:Filter

子节点:Prefix、Tag

说明

在OSS ON云盒使用场景中,不支持使用此选项。

Prefix 字符串 tmp/not/ 本条排除规则所适用的Object前缀。不可为空。
  • 如果Rule节点下配置了Prefix,则Not节点下的Prefix必须以Rule节点下的Prefix为前缀。例如,Rule节点下配置的Prefix为dir,则Not节点下的Prefix必须以dir开头,例如dir1dir2等。
  • 如果Not节点下未配置Tag,则Not节点下配置的Prefix不能和Rule节点下的Prefix相同。

父节点:Not

子节点:无

Tag 容器 不涉及 本条排除规则所适用的Object标签,至多一个,可置空。

响应头

此接口仅涉及公共响应头。更多信息,请参见公共响应头(Common Response Headers)

示例

  • 为未开启版本控制的Bucket设置生命周期
    • 请求示例1(未包含Not排除条件)
      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 qn6qrrqxo2oawuk53otf****: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>            
    • 请求示例2(包含Not排除条件)
      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>logs</Prefix>
          <Status>Enabled</Status>
          <Filter>
            <Not>
              <Prefix>logs1</Prefix>
              <Tag><Key>key1</Key><Value>value1</Value></Tag>
              </Not>
          </Filter>
          <Expiration>
            <Days>100</Days>
          </Expiration>
          <Transition>
            <Days>Days</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
  • 为已开启版本控制的Bucket设置生命周期

    请求示例

    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>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: 7D3435J59A9812BAD56E
    Date: Mon , 6 May 2019 15:23:20 GMT
    Content-Length: 0
    Connection: keep-alive
    Server: AliyunOSS

SDK

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

错误码

错误码 HTTP状态码 描述
InvalidArgument 400 返回此错误的可能原因如下:
  • OSS支持Standard Bucket中Standard Objects转储为IA、Archive存储类型。Standard Bucket可以针对一个Object同时配置转储IA和Archive存储类型规则,但转储Archive存储类型必须晚于转储IA存储类型的时间。
  • 指定Object的过期时间必须晚于转储为IA或者Archive存储类型的时间。
AccessDenied 403 没有操作权限。仅支持拥有oss:PutBucketLifecycle权限的用户设置生命周期规则。