生命周期規(guī)則
您可以創(chuàng)建基于最后一次修改時(shí)間(Last Modified Time)的生命周期規(guī)則(Lifecycle),定期將云盒Bucket內(nèi)的Object和碎片刪除,從而節(jié)省存儲(chǔ)費(fèi)用。
前提條件
僅華東1(杭州)、華南1(深圳)、華南2(河源)、華北2(北京)、西南1(成都)地域支持使用OSS ON云盒服務(wù)。
已購(gòu)買云盒。具體操作,請(qǐng)參見(jiàn)購(gòu)買云盒。
使用限制
不支持對(duì)重疊前綴的Object設(shè)置兩條或兩條以上包含碎片過(guò)期策略的生命周期規(guī)則。示例如下:
示例一
您對(duì)整個(gè)Bucket設(shè)置了一條包含碎片過(guò)期策略的生命周期規(guī)則,則不支持對(duì)Bucket中任意前綴的Object再設(shè)置一條包含碎片過(guò)期策略的生命周期規(guī)則。
示例二
您對(duì)某個(gè)Bucket中前綴為dir1設(shè)置了一條包含碎片過(guò)期策略的生命周期規(guī)則,則不支持對(duì)該Bucket中包含重疊前綴(例如dir1/dir2)的Object再設(shè)置一條包含碎片過(guò)期策略的生命周期規(guī)則。
注意事項(xiàng)
規(guī)則數(shù)量
通過(guò)控制臺(tái)最多可配置100條生命周期規(guī)則。如果您需要配置更多數(shù)量的生命周期規(guī)則,請(qǐng)使用SDK或者命令行工具ossutil。
覆蓋語(yǔ)義
PutBucketLifecycle為覆蓋語(yǔ)義。例如,某個(gè)Bucket已配置了生命周期規(guī)則Rule1,您需要在Rule1基礎(chǔ)上繼續(xù)追加生命周期規(guī)則Rule2,您需要執(zhí)行以下操作。
調(diào)用GetBucketLifecycle接口獲取當(dāng)前生命周期規(guī)則配置Rule1。
在Rule1基礎(chǔ)上疊加Rule2。
調(diào)用PutBucketLifecycle接口更新生命周期規(guī)則為Rule1+Rule2。
生效時(shí)間
生命周期規(guī)則創(chuàng)建后的24小時(shí)內(nèi),OSS會(huì)加載規(guī)則。規(guī)則加載完成后,OSS會(huì)在每天的北京時(shí)間8:00開始執(zhí)行規(guī)則。
Object的最后修改時(shí)間與生命周期規(guī)則開始執(zhí)行時(shí)間(8:00)必須間隔24小時(shí)以上。例如生命周期規(guī)則指定Object上傳1天后刪除,則2020年7月20日上傳的文件刪除時(shí)間如下:
北京時(shí)間8:00前上傳的文件會(huì)在2020年7月21日8:00開始刪除,并在7月22日8:00前刪除完畢。
北京時(shí)間8:00后上傳的文件會(huì)在2020年7月22日8:00開始刪除,并在7月23日8:00前刪除完畢。
更新生命周期規(guī)則會(huì)中止當(dāng)天的生命周期任務(wù),請(qǐng)不要頻繁更新生命周期規(guī)則。
執(zhí)行完成時(shí)間
對(duì)于未配置標(biāo)簽的生命周期規(guī)則,執(zhí)行10億或以下次生命周期相關(guān)操作(包括Object刪除、Object存儲(chǔ)類型轉(zhuǎn)換以及碎片過(guò)期),可在24小時(shí)內(nèi)完成。如果生命周期相關(guān)操作超出10億次,則可能超出24小時(shí)。
對(duì)于已配置標(biāo)簽的生命周期規(guī)則,執(zhí)行5億或以下次生命周期相關(guān)操作(包括Object刪除、Object存儲(chǔ)類型轉(zhuǎn)換以及碎片過(guò)期),可在24小時(shí)內(nèi)完成。如果生命周期相關(guān)操作超出5億次,則可能超出24小時(shí)。
如果存儲(chǔ)空間開啟了版本控制,則對(duì)Object的每個(gè)版本均記為一次操作。
費(fèi)用說(shuō)明
關(guān)于通過(guò)生命周期規(guī)則轉(zhuǎn)換Object存儲(chǔ)類型或者刪除Object時(shí)可能涉及的存儲(chǔ)和請(qǐng)求費(fèi)用說(shuō)明,請(qǐng)參見(jiàn)生命周期費(fèi)用說(shuō)明。
操作步驟
使用OSS控制臺(tái)
在左側(cè)導(dǎo)航欄,選擇 ,然后在Bucket列表中單擊目標(biāo)Bucket。
在左側(cè)導(dǎo)航欄,選擇 。
單擊創(chuàng)建規(guī)則,在創(chuàng)建生命周期規(guī)則面板,按如下說(shuō)明配置生命周期規(guī)則。
云盒Bucket未開啟版本控制
區(qū)域
配置項(xiàng)
說(shuō)明
基本設(shè)置
狀態(tài)
設(shè)置生命周期規(guī)則的狀態(tài),可選擇啟動(dòng)或禁用。
策略
選擇生命周期規(guī)則作用的Object。您可以選擇按前綴匹配或配置到整個(gè)Bucket。
前綴
輸入規(guī)則要匹配的Object名稱的前綴。例如,您需要匹配名稱以img開頭的Object,則輸入img。
清除策略
文件時(shí)間策略
選擇Object過(guò)期策略,可選擇過(guò)期天數(shù)、過(guò)期日期和不啟用。選擇不啟用時(shí),文件過(guò)期策略不生效。
刪除文件
配置刪除過(guò)期Object的規(guī)則。
例如,過(guò)期日期設(shè)置為2022年09月24日,并指定在指定日期前的數(shù)據(jù)自動(dòng)刪除,則最后修改日期在2021年9月24日之前的Object會(huì)被自動(dòng)刪除,且刪除后不可恢復(fù)。
清理碎片
碎片過(guò)期策略
設(shè)置對(duì)過(guò)期碎片執(zhí)行的操作。您可以選擇碎片過(guò)期策略的過(guò)期天數(shù)或過(guò)期日期,也可以選擇不啟用碎片過(guò)期策略。當(dāng)選擇不啟用時(shí),碎片過(guò)期策略不生效。
重要 生命周期規(guī)則至少包含文件過(guò)期策略或碎片過(guò)期策略。刪除碎片
根據(jù)碎片過(guò)期策略選擇的過(guò)期天數(shù)或過(guò)期日期設(shè)定碎片何時(shí)過(guò)期,碎片過(guò)期后會(huì)被自動(dòng)刪除,且刪除后不可恢復(fù)。
云盒Bucket已開啟版本控制
開啟版本控制后,基本設(shè)置與清理碎片區(qū)域涉及的配置項(xiàng),與未開啟版本控制的配置方法相同。以下表格僅介紹與未開啟版本控制相比,開啟版本控制后配置項(xiàng)存在的差異。
區(qū)域
配置項(xiàng)
說(shuō)明
當(dāng)前版本
清理對(duì)象刪除標(biāo)記
開啟版本控制后,清除策略中增加了清理對(duì)象刪除標(biāo)記選項(xiàng),其他選項(xiàng)與未開啟版本控制時(shí)相同。
選擇此選項(xiàng)后,如果當(dāng)前Object僅有一個(gè)版本且為刪除標(biāo)記時(shí),則OSS將刪除過(guò)期Object的刪除標(biāo)記。如果當(dāng)前Object有多個(gè)版本,且Object的最新版本為刪除標(biāo)記時(shí),則OSS將保留該刪除標(biāo)記。關(guān)于刪除標(biāo)記的更多信息,請(qǐng)參見(jiàn)刪除標(biāo)記。
歷史版本
文件時(shí)間策略
設(shè)置歷史版本文件的過(guò)期策略,可選擇過(guò)期天數(shù)和不啟用。當(dāng)選擇不啟用時(shí),文件過(guò)期策略不生效。
刪除文件
設(shè)定一個(gè)過(guò)期天數(shù)N,歷史版本的Object會(huì)在其被轉(zhuǎn)換為歷史版本的N天后過(guò)期,并在過(guò)期的第二天執(zhí)行刪除操作。例如設(shè)置為30,則在2021年09月01日被轉(zhuǎn)為歷史版本的Object會(huì)在2021年10月01日被刪除。
重要 您可以通過(guò)Object下一個(gè)版本的最后一次修改時(shí)間確定Object被轉(zhuǎn)為歷史版本的時(shí)間。
使用阿里云SDK
僅支持通過(guò)Java SDK設(shè)置生命周期規(guī)則,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的數(shù)據(jù)域名。
String endpoint = "https://cb-f8z7yvzgwfkl9q0h****.cn-hangzhou.oss-cloudbox.aliyuncs.com";
// 從環(huán)境變量中獲取訪問(wèn)憑證。運(yùn)行本代碼示例之前,請(qǐng)確保已設(shè)置環(huán)境變量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****";
// 創(chuàng)建OSSClient實(shí)例。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(new DefaultCredentialProvider(credentialsProvider.getCredentials()))
.clientConfiguration(conf)
.build();
try {
// 創(chuàng)建SetBucketLifecycleRequest。
SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);
// 設(shè)置規(guī)則ID。
String ruleId0 = "rule0";
// 如果文件匹配前綴設(shè)置為空,則表示此規(guī)則適用于Bucket中的所有Object。
String matchPrefix0 = null;
// 距最后修改時(shí)間3天后過(guò)期。
LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
request.AddLifecycleRule(rule);
// 發(fā)起設(shè)置生命周期規(guī)則請(qǐng)求。
ossClient.setBucketLifecycle(request);
// 查看生命周期規(guī)則。
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
關(guān)于使用ossutil設(shè)置生命周期規(guī)則的具體操作, 請(qǐng)參見(jiàn)lifecycle(生命周期)。
使用REST API
如果您的程序自定義要求較高,您可以直接發(fā)起REST API請(qǐng)求。直接發(fā)起REST API請(qǐng)求需要手動(dòng)編寫代碼計(jì)算簽名。更多信息,請(qǐng)參見(jiàn)PutBucketLifecycle。