您可以创建基于最后一次修改时间(Last Modified Time)的生命周期规则(Lifecycle),定期将云盒Bucket内的Object和碎片删除,从而节省存储费用。
使用限制
不支持对重叠前缀的Object设置两条或两条以上包含碎片过期策略的生命周期规则。示例如下:
注意事项
规则数量
通过控制台最多可配置100条生命周期规则。如果您需要配置更多数量的生命周期规则,请使用SDK或者命令行工具ossutil。
覆盖语义
PutBucketLifecycle为覆盖语义。例如,某个Bucket已配置了生命周期规则Rule1,您需要在Rule1基础上继续追加生命周期规则Rule2,您需要执行以下操作。
生效时间
生命周期规则创建后的24小时内,OSS会加载规则。规则加载完成后,OSS会在每天的北京时间8:00开始执行规则。
Object的最后修改时间与生命周期规则开始执行时间(8:00)必须间隔24小时以上。例如生命周期规则指定Object上传1天后删除,则2020年7月20日上传的文件删除时间如下:
重要 更新生命周期规则会中止当天的生命周期任务,请不要频繁更新生命周期规则。
执行完成时间
对于未配置标签的生命周期规则,执行10亿或以下次生命周期相关操作(包括Object删除、Object存储类型转换以及碎片过期),可在24小时内完成。如果生命周期相关操作超出10亿次,则可能超出24小时。
对于已配置标签的生命周期规则,执行5亿或以下次生命周期相关操作(包括Object删除、Object存储类型转换以及碎片过期),可在24小时内完成。如果生命周期相关操作超出5亿次,则可能超出24小时。
说明 如果存储空间开启了版本控制,则对Object的每个版本均记为一次操作。
费用说明
关于通过生命周期规则转换Object存储类型或者删除Object时可能涉及的存储和请求费用说明,请参见生命周期费用说明。
操作步骤
使用OSS控制台
登录OSS管理控制台。
在左侧导航栏,选择,然后在Bucket列表中单击目标Bucket。
在左侧导航栏,选择。
单击创建规则,在创建生命周期规则面板,按如下说明配置生命周期规则。
使用阿里云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;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
public class Demo {
public static void main(String[] args) throws Exception {
// 填写云盒Bucket的数据域名。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写云盒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(credentialsProvider.getCredentials()))
.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();
}
}
}
}
使用REST API
如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketLifecycle。