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
来设置生命周期规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 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
来查看生命周期规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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
来清空生命周期规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); |