您可以创建基于最后一次修改时间(Last Modified Time)的生命周期规则(Lifecycle),定期将云盒Bucket内的Object和碎片删除,从而节省存储费用。

使用限制

不支持对重叠前缀的Object设置两条或两条以上包含碎片过期策略的生命周期规则。示例如下:
  • 示例一

    您对整个Bucket设置了一条包含碎片过期策略的生命周期规则,则不支持对Bucket中任意前缀的Object再设置一条包含碎片过期策略的生命周期规则。

  • 示例二

    您对某个Bucket中前缀为dir1设置了一条包含碎片过期策略的生命周期规则,则不支持对该Bucket中包含重叠前缀(例如dir1/dir2)的Object再设置一条包含碎片过期策略的生命周期规则。

注意事项

  • 覆盖语义

    PutBucketLifecycle为覆盖语义。当您需要追加生命周期规则时,请先调用GetBucketLifecycle接口获取当前生命周期规则配置,然后追加新的生命周期规则配置,最后调用PutBucketLifecycle接口更新生命周期规则配置。

  • 数量

    通过控制台最多可配置100条生命周期规则,通过SDK或者命令行工具ossutil最多可配置1000条生命周期规则。

  • 生效时间

    生命周期规则创建后的24小时内,OSS会加载规则。规则加载完成后,OSS会在每天的北京时间8:00开始执行规则。

    Object的最后修改时间与生命周期规则开始执行时间(8:00)必须间隔24小时以上。例如生命周期规则指定Object上传1天后删除,则2020年7月20日上传的文件删除时间如下:

    • 北京时间8:00前上传的文件会在2020年7月21日8:00开始删除,并在7月22日8:00前删除完毕。
    • 北京时间8:00后上传的文件会在2020年7月22日8:00开始删除,并在7月23日8:00前删除完毕。
    重要 更新生命周期规则会中止当天的生命周期任务,请不要频繁更新生命周期规则。
  • 在开通了OSS-HDFS服务的Bucket中配置生命周期规则

    如果您对开通了OSS-HDFS服务的Bucket设置或更新为匹配整个Bucket的生命周期规则,需通过NOT元素排除.dlsdata/,避免因生命周期规则触发的Object删除或存储类型转换行为影响OSS-HDFS数据读写。

    lifecycle

云盒Bucket

  1. 登录OSS管理控制台
  2. 在左侧导航栏,单击云盒Bucket,然后单击目标Bucket名称。
  3. 选择数据管理 > 生命周期
  4. 单击创建规则,在创建生命周期规则面板,按如下说明配置生命周期规则。
    • 云盒Bucket未开启版本控制
      区域 配置项 说明
      基本设置 状态

      设置生命周期规则的状态,可选择启动禁用

      策略

      选择生命周期规则作用的Object。您可以选择按前缀匹配配置到整个Bucket

      前缀 输入规则要匹配的Object名称的前缀。例如,您需要匹配名称以img开头的Object,则输入img
      清除策略 文件过期策略

      选择Object过期策略,可选择过期天数过期日期不启用。选择不启用时,文件过期策略不生效。

      删除文件

      配置删除过期Object的规则。

      例如,过期日期设置为2022年09月24日,并指定在指定日期前的数据自动删除,则最后修改日期在2021年9月24日之前的Object会被自动删除,且删除后不可恢复。

      清理碎片 碎片过期策略

      设置对过期碎片执行的操作。您可以选择碎片过期策略的过期天数过期日期,也可以选择不启用碎片过期策略。当选择不启用时,碎片过期策略不生效。

      重要 生命周期规则至少包含文件过期策略或碎片过期策略。
      删除碎片

      根据碎片过期策略选择的过期天数或过期日期设定碎片何时过期,碎片过期后会被自动删除,且删除后不可恢复。

    • 云盒Bucket已开启版本控制

      开启版本控制后,基本设置清理碎片区域涉及的配置项,与未开启版本控制的配置方法相同。以下表格仅介绍与未开启版本控制相比,开启版本控制后配置项存在的差异。

      区域 配置项 说明
      当前版本 清理对象删除标记

      开启版本控制后,清除策略中增加了清理对象删除标记选项,其他选项与未开启版本控制时相同。

      选择此选项后,如果当前Object仅有一个版本且为删除标记时,则OSS将删除过期Object的删除标记。如果当前Object有多个版本,且Object的最新版本为删除标记时,则OSS将保留该删除标记。关于删除标记的更多信息,请参见删除标记

      历史版本 文件过期策略

      设置历史版本文件的过期策略,可选择过期天数不启用。当选择不启用时,文件过期策略不生效。

      删除文件

      设定一个过期天数N,历史版本的Object会在其被转换为历史版本的N天后过期,并在过期的第二天执行删除操作。例如设置为30,则在2021年09月01日被转为历史版本的Object会在2021年10月01日被删除。

      重要 您可以通过Object下一个版本的最后一次修改时间确定Object被转为历史版本的时间。

使用阿里云SDK

仅支持通过Java SDK设置生命周期规则,Java SDK要求3.15.0及以上版本。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import java.util.List;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.ClientBuilderConfiguration;

public class Demo {

    public static void main(String[] args) throws Exception {
        // 填写云盒Bucket的数据域名。
        String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 填写云盒Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
    // 填写云盒Bucket所在地域。
    String region = "cn-hangzhou";
    // 填写云盒ID。
        String cloudBoxId = "cb-f8z7yvzgwfkl9q0h****";

        // 创建OSSClient实例。
        ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
        conf.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(new DefaultCredentialProvider(accessKeyId, accessKeySecret))
                .clientConfiguration(conf)
                .build();

        try {
            // 创建SetBucketLifecycleRequest。
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // 设置规则ID。
            String ruleId0 = "rule0";
            // 如果文件匹配前缀设置为空,则表示此规则适用于Bucket中的所有Object。
            String matchPrefix0 = null;

            // 距最后修改时间3天后过期。
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            request.AddLifecycleRule(rule);

            // 发起设置生命周期规则请求。
            ossClient.setBucketLifecycle(request);

            // 查看生命周期规则。
            List<LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
            for(LifecycleRule rules : listRules){
                System.out.println("ruleId="+rules.getId()+", matchPrefix="+rules.getPrefix()+", expirationDays="+rules.getExpirationDays());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

使用命令行工具ossutil

关于使用ossutil设置生命周期规则的具体操作, 请参见添加或修改生命周期规则

使用REST API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketLifecycle