您可以通过 SDK 使用对象存储的生命周期管理功能,实现对象的过期删除达到节约存储成本的目的。配置生命周期规则时,可指定规则生效的对象前缀或者对象标签。如果您同时指定了两种生效条件,则对象需满足设置的所有条件,才会应用该生命周期规则。
注意
tos:PutLifecycleConfiguration
权限,具体操作,请参见权限配置指南。以下代码用于设置存储桶的生命周期规则。
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" "github.com/volcengine/ve-tos-golang-sdk/v2/tos/enum" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else if clientErr, ok := err.(*tos.TosClientError); ok { fmt.Println("Error:", clientErr.Error()) fmt.Println("Client Cause Err:", clientErr.Cause.Error()) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = os.Getenv("TOS_ACCESS_KEY") secretKey = os.Getenv("TOS_SECRET_KEY") // Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com endpoint = "https://tos-cn-beijing.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) lifeCycleRule := tos.LifecycleRule{ // 规则 ID ID: "rule1", // 指定规则适用的前缀,匹配前缀 Prefix: "prefix-", // 规则状态,标示规则是否启用 Status: enum.LifecycleStatusEnabled, // 对象的过期时间 // Days: 指定在对象过期多少天后进行操作 // Date: 指定对象在哪一天过期 Expiration: &tos.Expiration{ Days: 30, }, // 对象标签 Tag: []tos.Tag{{ Key: "key", Value: "value", }}, } // 设置生命周期规则 putOutput, err := client.PutBucketLifecycle(ctx, &tos.PutBucketLifecycleInput{ Bucket: bucketName, Rules: []tos.LifecycleRule{lifeCycleRule}, }) checkErr(err) fmt.Println("PutBucketLifecycle Request ID:", putOutput.RequestID) }
以下代码用于获取存储桶的生命周期规则。
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else if clientErr, ok := err.(*tos.TosClientError); ok { fmt.Println("Error:", clientErr.Error()) fmt.Println("Client Cause Err:", clientErr.Cause.Error()) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = os.Getenv("TOS_ACCESS_KEY") secretKey = os.Getenv("TOS_SECRET_KEY") // Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com endpoint = "https://tos-cn-beijing.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) // 查询生命周期规则 getOutput, err := client.GetBucketLifecycle(ctx, &tos.GetBucketLifecycleInput{Bucket: bucketName}) checkErr(err) fmt.Println("GetBucketLifecycle Request ID:", getOutput.RequestID) fmt.Println("GetBucketLifecycle Rules Length:", len(getOutput.Rules)) for _, rule := range getOutput.Rules { // 规则 ID fmt.Println("Rule ID:", rule.ID) // 指定规则适用的前缀,匹配前缀 fmt.Println("Rule Prefix:", rule.Prefix) // 规则状态,标示规则是否启用 fmt.Println("Rule Status:", rule.Status) // 存储类型转换属性,描述对象的存储类型何时进行转换 fmt.Println("Rule Transitions:", rule.Transitions) // 对象的过期时间 fmt.Println("Rule Expiration:", rule.Expiration) // 非当前版本存储类型何时进行转换 fmt.Println("Rule NonCurrentVersionTransition:", rule.NonCurrentVersionTransition) // 非当前版本对象何时过期 fmt.Println("Rule NoCurrentVersionExpiration:", rule.NoCurrentVersionExpiration) // 标签 for key, value := range rule.Tag { fmt.Println("Rule Tag Key:", key) fmt.Println("Rule Tag Value:", value) } // 非完成上传的分片上传最长保留时间 fmt.Println("Rule AbortInCompleteMultipartUpload:", rule.AbortInCompleteMultipartUpload) } }
注意
删除桶生命周期规则前,您必须具有 tos:PutLifecycleConfiguration
权限,具体操作,请参见权限配置指南。
以下代码用于设置存储桶的生命周期规则:
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else if clientErr, ok := err.(*tos.TosClientError); ok { fmt.Println("Error:", clientErr.Error()) fmt.Println("Client Cause Err:", clientErr.Cause.Error()) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = os.Getenv("TOS_ACCESS_KEY") secretKey = os.Getenv("TOS_SECRET_KEY") // Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com endpoint = "https://tos-cn-beijing.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) // 删除生命周期规则 deleteOutput, err := client.DeleteBucketLifecycle(ctx, &tos.DeleteBucketLifecycleInput{Bucket: bucketName}) checkErr(err) fmt.Println("DeleteBucketLifecycle Request ID:", deleteOutput.RequestID) }
关于生命周期规则的更多信息,请参见设置生命周期规则。