本文介绍如何管理生命周期。

OSS支持设置生命周期(Lifecycle)规则,自动删除过期的文件和碎片,或将到期的文件转储为低频或归档存储类型,从而节省存储费用。每条规则包含:
  • 规则ID。用于标识一条规则,同一存储空间内规则ID不能重复。
  • 策略。有以下两种设置方式。同一存储空间内仅支持一种设置方式。
    • 按前缀匹配。此种方式允许创建多条规则,前缀不能重复。
    • 配置到整个存储空间。此种方式只能创建一条规则。
  • 过期时间。有两种指定方式:
    • 指定一个过期天数N,文件会在其最近更新时间点的N天后过期。
    • 指定一个过期时间点,最近更新时间在该时间点之前的文件全部过期。
  • 是否生效。

通过uploadPart方法上传的分片也支持设置生命周期规则。文件最后修改时间以初始化分片上传事件的时间为准。

更多关于生命周期的内容请参见管理对象生命周期。管理生命周期的完整代码请参见GitHub

设置生命周期规则

以下代码用于设置生命周期规则:

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)
    }