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方法上传的分片也支持设置生命周期规则。文件最后修改时间以初始化分片上传事件的时间为准。
更多关于生命周期的内容请参见管理对象生命周期。
设置生命周期规则
以下代码用于设置生命周期规则:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 设置生命周期规则1(id:"rule1", enable:true, prefix:"foo/", expiry:Days 3),表示前缀为foo的文件距最后修改时间3天后过期。
rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)
// 在受版本控制状态下的object仅有删除标记的情况下,自动删除删除标记。
deleteMark := true
expiration := oss.LifecycleExpiration{
ExpiredObjectDeleteMarker: &deleteMark,
}
// 非当前版本Object超过30天后过期删除。
versionExpiration := oss.LifecycleVersionExpiration{
NoncurrentDays: 30,
}
// 非当前版本Object超过10天后转为IA存储类型。
versionTransition := oss.LifecycleVersionTransition{
NoncurrentDays: 10,
StorageClass: "IA",
}
// 设置生命周期规则2。
rule2 := oss.LifecycleRule{
ID: "rule2",
Prefix: "<yourObjectPrefix>",
Status: "Enabled",
Expiration: &expiration,
NonVersionExpiration: &versionExpiration,
NonVersionTransition: &versionTransition,
}
// 设置生命周期规则3,对标签键为tagA、标签值为A的文件,距文件最后修改时间3天后过期。
rule3 := oss.LifecycleRule{
ID: "rule3",
Prefix: "",
Status: "Enabled",
Tags: []oss.Tag{
oss.Tag{
Key: "tagA",
Value: "A",
},
},
Expiration: &oss.LifecycleExpiration{Days: 3},
}
// 设置生命周期规则。
rules := []oss.LifecycleRule{rule1, rule2, rule3}
bucketName := "<yourBucketName>"
err = client.SetBucketLifecycle(bucketName, rules)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
查看生命周期规则
以下代码用于查看生命周期规则:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 查看生命周期规则。
lcRes, err := client.GetBucketLifecycle(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Lifecycle Rules:", lcRes.Rules)
}
清空生命周期规则
以下代码用于清空生命周期规则:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 清空生命周期规则。
err = client.DeleteBucketLifecycle(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}