OSS支持设置生命周期(Lifecycle)规则,自动删除过期的文件(Object)和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。本文介绍如何管理存储空间(Bucket)的生命周期规则。
设置生命周期规则
以下代码用于为examplebucket存储空间按照标签匹配和前缀匹配的方式设置生命周期规则。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
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}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
err = client.SetBucketLifecycle(bucketName, rules)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
查看生命周期规则
以下代码用于查看examplebucket存储空间的生命周期规则。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 查看生命周期规则。
lcRes, err := client.GetBucketLifecycle(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Lifecycle Rules:", lcRes.Rules)
}
清空生命周期规则
以下代码用于清空examplebucket存储空间的生命周期规则。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 清空生命周期规则。
err = client.DeleteBucketLifecycle(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
相关文档
- 关于生命周期规则的完整示例代码,请参见GitHub示例。
- 关于设置生命周期规则的API接口说明,请参见PutBucketLifecycle。
- 关于查看生命周期规则的API接口说明,请参见GetBucketLifecycle。
- 关于清空生命周期规则的API接口说明,请参见DeleteBucketLifecycle。