将可追加写对象转换为冷归档存储类型

OSS 的可追加写对象(Appendable Object)因其可写状态,生命周期规则默认无法直接将其存储类型转换为冷归档或深度冷归档。对于不需要继续追加写的 Appendable Object,可通过SealAppendObject操作转换为普通对象,即可通过生命周期规则自动沉降至冷归档(Cold Archive)或深度冷归档(Deep Cold Archive)的存储类型,以降低长期存储成本。

重要

如需调用SealAppendObject接口,请提交工单申请。

以将存储空间 examplebucket 中,前缀为 appendobjects/ 且最后修改时间超过30天的可追加对象转换为冷归档存储为例,介绍具体操作步骤。

步骤一:列出待处理的可追加写对象

筛选并列出所有符合条件的Appendable Object,为后续的SealAppendObject操作提供目标。

重要

Bucket未开启版本控制时,对Bucket中的可追加写对象执行追加写操作,其最后修改时间(Last-Modified)将更新为当前操作时间。而当Bucket处于开启或暂停版本控制状态时,可追加写对象的最后修改时间始终与其初始上传时间保持一致,后续的追加写操作不会更新该时间戳。因此,在Bucket处于开启或暂停版本控制状态下,本操作实际列出的是所有初始上传时间超过30天的可追加写对象。

ossutil

执行以下命令,筛选并列出所有符合条件的Appendable Object。示例中将列出最后修改时间超过30天、存储类型不是冷归档/深度冷归档的Appendable Object。注意过滤条件顺序。

ossutil ls oss://examplebucket/appendobjects/ -r -q --short-format  --min-age=30d  --metadata-exclude="x-oss-storage-class=*ColdArchive" --metadata-exclude="x-oss-sealed-time=*" --metadata-include="x-oss-object-type=Appendable"

返回示例:

oss://examplebucket/appendobjects/unsealed_object1.txt
oss://examplebucket/appendobjects/unsealed_object2.txt
oss://examplebucket/appendobjects/unsealed_object3.txt

API

调用GetBucket (ListObjects)ListObjectsV2(GetBucketV2) 接口,遍历指定前缀下的所有对象,并根据以下条件在返回结果中筛选目标对象:

  • 文件类型字段<Type> 值为 Appendable

  • 存储类型字段<StorageClass> 字段值不为 ColdArchive 或 DeepColdArchive

  • 最后修改时间字段<LastModified> 在30天前。

  • 不包含<SealedTime>字段。

步骤二:执行 SealAppendObject 操作

执行 SealAppendObject 操作将Appendable Object转换为普通对象,以便应用生命周期规则。

ossutil

  1. 获取对象大小:执行stat命令获取对象的Content-Length,作为后续SealAppendableObject操作的position参数值。

    ossutil stat oss://examplebucket/appendobjects/unsealed_object1.txt
  2. 执行 SealAppendObject 操作:使用invoke-operation命令调用SealAppendObject接口,将上一步获取的Content-Length(例如65536)作为position参数传入。

    ossutil api invoke-operation --op-name seal --method POST --bucket examplebucket --key appendobjects/unsealed_object1.txt --parameters seal --parameters position=65536

API

  1. 获取对象大小:通过GetBucket (ListObjects)ListObjectsV2(GetBucketV2) 接口的返回结果,获取目标对象的 <Size> 值。

  2. 执行 SealAppendObject 操作:对待操作的文件依次调用SealAppendObject接口,将上一步获取的<Size>字段作为请求中 position参数的值,将其转为非追加写状态。

步骤三:配置生命周期规则

可配置生命周期规则,使其在满足指定时间条件后自动转换为冷归档或深度冷归档存储类型。

注意:此规则对于普通文件(通过 PutObject、分片上传等方式上传的文件)、处于非追加写状态的文件均适用,请确保规则的前缀设置足够精确,以避免意外转换其他文件。

控制台

  1. 登录OSS管理控制台

  2. 单击Bucket 列表,然后单击examplebucket。

  3. 选择数据管理 > 生命周期

  4. 单击创建规则,按如下说明配置生命周期规则,其余参数保留默认配置。

    区域

    配置项

    配置方法

    基础设置

    状态

    选择启动

    策略

    选择按前缀匹配

    前缀

    填入appendobjects/

    当前版本文件执行策略设置

    文件时间策略

    选择指定天数

    生命周期管理规则

    选择最后一次修改时间30天后,数据自动转换成冷归档存储

  5. 单击确定

ossutil

  1. 创建一个名为lifecycle.xml的文件,并填入以下内容。该规则会将appendobjects/前缀下,最后修改时间超过30天的对象转换为ColdArchive存储类型。

    <LifecycleConfiguration>
      <Rule>
        <ID>rule1</ID>
        <Prefix>appendobjects/</Prefix>
        <Status>Enabled</Status>
        <Transition>
          <Days>30</Days>
          <StorageClass>ColdArchive</StorageClass>
        </Transition>
      </Rule>
    </LifecycleConfiguration>
  2. 执行以下命令,为存储空间 examplebucket应用生命周期规则。

    ossutil api put-bucket-lifecycle --bucket examplebucket --lifecycle-configuration file://lifecycle.xml

API

调用 PutBucketLifecycle接口,将XML内容作为请求体(Request Body)上传,为目标存储空间 examplebucket设置规则。

PUT /?lifecycle HTTP/1.1
Host: oss-examplebucket.oss.aliyuncs.com
Content-Length: 336
Date: Mon, 6 May 2025 15:23:20 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250506/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
  <Rule>
    <ID>rule1</ID>
    <Prefix>appendobjects/</Prefix>
    <Status>Enabled</Status>
    <Transition>
      <Days>30</Days>
      <StorageClass>ColdArchive</StorageClass>
    </Transition>
  </Rule>
</LifecycleConfiguration>

结果验证

生命周期规则配置完成后,通常在次日凌晨生效并开始执行。

规则生效后,可通过 OSS 控制台或 ossutil stat 命令查看目标Object的存储类型,验证其是否已成功转换为冷归档。