OSS支持设置生命周期(Lifecycle)规则,自动删除过期的文件和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。本文介绍如何管理生命周期规则。
背景信息
生命周期规则包含如下信息:
- 前缀或标签匹配策略:生命周期规则匹配的Object和碎片。
- 按前缀匹配:按指定前缀匹配Object和碎片。可创建多条规则匹配不同的前缀,前缀不能重复。
- 按标签匹配:按指定标签的Key和Value匹配Object。单条规则可配置多个标签,OSS对所有拥有这些标签的对象执?生命周期规则。标签匹配?可以作用于碎片。
说明 对象标签功能详情请参见 对象标签。
- 按前缀+标签匹配:按指定前缀和一个或多个标签的筛选条件匹配对象。
- 配置到整个Bucket:匹配整个Bucket内的所有Object和碎片。此种方式只能创建一条规则。
- 文件过期策略:设置Object的过期时间及操作。
- 过期天数:指定一个过期天数N,并指定非版本状态下的所有Object、以及版本控制状态下的当前版本Object过期后执行什么操作。Object会在其最后修改时间的N天后过期,并执行指定的操作。
- 过期日期:指定一个过期日期,并指定非版本状态下的所有Object、以及版本控制状态下的当前版本Object过期后执行什么操作。最后修改时间在该日期之前的Object全部过期,并执行指定的操作。
- Object成为非当前版本天数:指定一个过期天数N,并指定非当前版本Object过期后执行什么操作。Object会在其成为非当前版本的N天后过期,并执行指定的操作。
说明 您可以将过期Object转换为低频访问类型或归档类型,也可以选择删除过期Object。详情请参见 生命周期配置元素。 - 碎片过期策略:设置碎片的过期时间及操作。
- 过期天数:可指定一个过期天数N,碎片会在其最后修改时间的N天后被删除。
- 过期日期:指定一个过期日期,最后修改时间在该日期之前的碎片会被全部删除。
通过uploadPart方法上传的分片也支持设置生命周期规则。文件最后修改时间以初始化分片上传事件的时间为准。
更多关于生命周期的内容请参见管理对象生命周期。
设置生命周期规则
通过putBucketLifecycle
来设置生命周期规则:
const OSS = require('ali-oss') const client = new OSS({ // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。 region: '<Your region>' // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: '<Your bucket name>' }); async function putBucketLifecycle(lifecycle) { try { const result = await client.putBucketLifecycle('<bucket-name>', [ lifecycle ]); console.log(result); } catch (e) { console.log(e); } } const lifecycle1 = { id: 'rule1', status: 'Enabled', prefix: 'foo/', expiration: { days: 3 // 指定当前版本Object距其最后修改时间3天后过期。 } } putBucketLifecycle(lifecycle1) const lifecycle2 = { id: 'rule2', status: 'Enabled', prefix: 'foo/', expiration: { createdBeforeDate: '2020-02-18T00:00:00.000Z' // 指定日期之前创建的文件过期。 }, } putBucketLifecycle(lifecycle2) const lifecycle3 = { id: 'rule3', status: 'Enabled', prefix: 'foo/', abortMultipartUpload: { days: 3 // 指定分片3天后过期。 }, } putBucketLifecycle(lifecycle3) const lifecycle4 = { id: 'rule4', status: 'Enabled', prefix: 'foo/', abortMultipartUpload: { createdBeforeDate: '2020-02-18T00:00:00.000Z' // 指定日期之前创建的分片过期。 }, } putBucketLifecycle(lifecycle4) const lifecycle5 = { id: 'rule5', status: 'Enabled', prefix: 'foo/', transition: { // 指定当前版本Object距其最后修改时间20天后转归档存储类型。 days: 20, storageClass: 'Archive' }, expiration: { days: 21 // 指定当前版本Object距其最后修改时间21天后过期。 }, } putBucketLifecycle(lifecycle5) const lifecycle6 = { id: 'rule6', status: 'Enabled', prefix: 'foo/', transition: { // 指定日期之前自动将文件转为归档类型。 createdBeforeDate: '2020-02-18T00:00:00.000Z', // 指定日期应早于文件过期时间。 storageClass: 'Archive' }, expiration: { createdBeforeDate: '2020-02-19T00:00:00.000Z' // 指定日期之前创建的文件过期。 }, } putBucketLifecycle(lifecycle6) const lifecycle7 = { id: 'rule7', status: 'Enabled', prefix: 'foo/', noncurrentVersionExpiration: { noncurrentDays: 1 // 设置Object成为非当前版本1天后过期。 }, } putBucketLifecycle(lifecycle7) const lifecycle8 = { id: 'rule8', status: 'Enabled', prefix: 'foo/', expiredObjectDeleteMarker: true // 设置自动移除过期删除标记。 } putBucketLifecycle(lifecycle8) const lifecycle9 = { id: 'rule9', status: 'Enabled', prefix: 'foo/', // 设置非当前版本的Object距其最后修改时间10天之后转为低频访问类型。 noncurrentVersionTransition: { noncurrentDays: '10', storageClass: 'IA' } } putBucketLifecycle(lifecycle9) const lifecycle10 = { id: 'rule10', status: 'Enabled', prefix: 'foo/', // 设置非当前版本的Object距其最后修改时间10天之后转为低频访问类型。 noncurrentVersionTransition: { noncurrentDays: '10', storageClass: 'IA' }, // 指定规则所适用的对象标签。 tag: [{ key: 'key1', value: 'value1' }, { key: 'key2', value: 'value2' }] } putBucketLifecycle(lifecycle10)
查看生命周期规则
通过getBucketLifecycle
来查看生命周期规则:
const OSS = require('ali-oss') const client = new OSS({ region: '<Your region>' accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: '<Your bucket name>' }); async function getBucketLifecycle () { try { let result = await client.getBucketLifecycle('<bucket-name>'); console.log(result.rules); // 获取生命周期规则。 rules.forEach(rule => { console.log(rule.id) // 查看生命周期规则id。 console.log(rule.status) // 查看生命周期规则状态。 console.log(rule.tags) // 查看规则标签。 console.log(rule.expiration.days) // 查看过期天数规则。 console.log(rule.expiration.createdBeforeDate) // 查看过期日期规则。 // 查看过期分片规则。 console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate) // 查看存储类型转换规则。 console.log(rule.transition.days || rule.transition.createdBeforeDate) // 查看存储类型转换时间。 console.log(rule.transition.storageClass) // 转换存储类型。 // 查看是否自动删除过期删除标记。 console.log(rule.transition.expiredObjectDeleteMarker) // 查看非当前版本Object存储类型转换规则。 console.log(rule.noncurrentVersionTransition.noncurrentDays) // 查看非当前版本Object存储类型转换时间。 console.log(rule.noncurrentVersionTransition.storageClass) // 查看非当前版本Object转换的存储类型。 // 查看非当前版本Object的过期规则。 console.log(rule.noncurrentVersionExpiration.noncurrentDays) }) } catch (e) { console.log(e); } } getBucketLifecycle();
清空生命周期规则
通过deleteBucketLifecycle
来清空生命周期规则:
let OSS = require('ali-oss') let client = new OSS({ region: '<Your region>' accessKeyId: '<Your AccessKeyId>', accessKeySecret: '<Your AccessKeySecret>', bucket: '<Your bucket name>' }); async function deleteBucketLifecycle () { try { let result = await client.deleteBucketLifecycle('bucket-name'); console.log(result); } catch (e) { console.log(e); } } deleteBucketLifecycle();