All Products
Search
Document Center

Object Storage Service:Lifecycle (Go SDK V1)

Last Updated:Nov 29, 2025

Tidak semua data yang diunggah ke Object Storage Service (OSS) memerlukan akses yang sering. Untuk kepatuhan terhadap regulasi data atau keperluan pengarsipan, sebagian data mungkin perlu disimpan dalam kelas penyimpanan dingin. Anda dapat mengonfigurasi aturan siklus hidup berdasarkan waktu modifikasi terakhir untuk menghapus data yang tidak lagi diperlukan secara batch. Selain itu, OSS dapat secara otomatis memantau pola akses data, mendeteksi data dingin, dan memindahkannya ke kelas penyimpanan yang lebih sesuai dengan mengonfigurasi aturan siklus hidup berdasarkan waktu akses terakhir. Proses ini menerapkan Automatic Storage Tiering dan membantu mengurangi biaya penyimpanan.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Konfigurasikan client (Go SDK V1).

  • Untuk menetapkan aturan siklus hidup, Anda harus memiliki izin oss:PutBucketLifecycle. Untuk melihat aturan siklus hidup, Anda harus memiliki izin oss:GetBucketLifecycle. Untuk menghapus aturan siklus hidup, Anda harus memiliki izin oss:DeleteBucketLifecycle. Untuk informasi selengkapnya, lihat Berikan izin kustom kepada RAM user.

Tetapkan aturan siklus hidup

Kode berikut memberikan contoh cara menetapkan aturan siklus hidup berdasarkan waktu modifikasi terakhir dan waktu akses terakhir. Untuk memodifikasi satu atau beberapa aturan setelah ditetapkan, lihat Bagaimana cara memodifikasi satu atau beberapa konfigurasi aturan siklus hidup?.

Transisi kelas penyimpanan dan hapus file berdasarkan waktu modifikasi terakhir

Kode berikut memberikan contoh cara menetapkan aturan siklus hidup untuk bucket bernama examplebucket guna melakukan transisi kelas penyimpanan dan menghapus file berdasarkan waktu modifikasi terakhir.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Tentukan nama bucket.
	bucketName := "examplebucket"
	// Tentukan aturan siklus hidup 1. Aturan ini menentukan bahwa file dengan awalan "foo/" kedaluwarsa 3 hari setelah waktu modifikasi terakhirnya.
	rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)

	// Hapus penanda hapus secara otomatis untuk objek dalam bucket yang telah diaktifkan Pengendalian versi ketika objek tersebut hanya memiliki penanda hapus.
	deleteMark := true
	expiration := oss.LifecycleExpiration{
		ExpiredObjectDeleteMarker: &deleteMark,
	}

	// Hapus versi noncurrent objek 30 hari setelah menjadi noncurrent.
	versionExpiration := oss.LifecycleVersionExpiration{
		NoncurrentDays: 30,
	}

	// Transisikan versi noncurrent objek ke kelas penyimpanan Infrequent Access (IA) 10 hari setelah menjadi noncurrent.
	versionTransition := oss.LifecycleVersionTransition{
		NoncurrentDays: 10,
		StorageClass:   "IA",
	}

	// Tentukan aturan siklus hidup 2.
	rule2 := oss.LifecycleRule{
		ID:                   "rule2",
		Prefix:               "yourObjectPrefix",
		Status:               "Enabled",
		Expiration:           &expiration,
		NonVersionExpiration: &versionExpiration,
		NonVersionTransitions: []oss.LifecycleVersionTransition{
			versionTransition,
		},
	}

	// Tentukan aturan siklus hidup 3. Aturan ini menentukan bahwa file dengan kunci tag "tag1" dan nilai tag "value1" kedaluwarsa 3 hari setelah waktu modifikasi terakhirnya.
	rule3 := oss.LifecycleRule{
		ID:     "rule3",
		Prefix: "",
		Status: "Enabled",
		Tags: []oss.Tag{
			{
				Key:   "tag1",
				Value: "value1",
			},
		},
		Expiration: &oss.LifecycleExpiration{Days: 3},
	}

	// Tetapkan aturan siklus hidup.
	rules := []oss.LifecycleRule{rule1, rule2, rule3}
	err = client.SetBucketLifecycle(bucketName, rules)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

Transisi kelas penyimpanan untuk file, kecuali yang memiliki awalan dan tag tertentu, berdasarkan waktu modifikasi terakhir

Kode berikut menggunakan elemen Not di bawah node filter untuk mentransisikan semua file dalam examplebucket ke kelas penyimpanan Infrequent Access 30 hari setelah waktu modifikasi terakhirnya, kecuali file dengan awalan log, tag dengan kunci key1 dan nilai value1, serta ukuran tertentu.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Setel yourBucketName ke nama bucket Anda.
	bucketName := "yourBucketName"

	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	tag := oss.Tag{
		Key:   "key1",
		Value: "value1",
	}
	// Tentukan ukuran minimum objek yang dikenai aturan siklus hidup.
	size := int64(500)
	// Tentukan ukuran maksimum objek yang dikenai aturan siklus hidup.
	smallSize := int64(64500)
	filter := oss.LifecycleFilter{
		ObjectSizeGreaterThan: &size,
		ObjectSizeLessThan:    &smallSize,
		Not: []oss.LifecycleFilterNot{
			{
				Prefix: "logs/log",
				Tag:    &tag,
			},
		},
	}
	rule1 := oss.LifecycleRule{
		ID:     "mtime transition1",
		Prefix: "logs",
		Status: "Enabled",
		Transitions: []oss.LifecycleTransition{
			{
				Days:         30,
				StorageClass: oss.StorageIA,
			},
		},
		Filter: &filter,
	}
	var rules = []oss.LifecycleRule{rule1}
	err = client.SetBucketLifecycle(bucketName, rules)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Printf("%s\n", "set lifecycle succeeded")
}

Transisi kelas penyimpanan berdasarkan waktu akses terakhir

Kode berikut memberikan contoh cara menetapkan aturan siklus hidup untuk bucket bernama `yourBucketName` guna melakukan transisi kelas penyimpanan berdasarkan waktu akses terakhir.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Setel yourBucketName ke nama bucket Anda.
	bucketName := "yourBucketName"

	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	isTrue := true
	isFalse := false
	// Tentukan aturan siklus hidup 1. Aturan ini mentransisikan semua objek yang memiliki awalan "logs" dan berukuran 64 KB atau lebih kecil ke kelas penyimpanan Infrequent Access 30 hari setelah waktu akses terakhirnya. Saat objek-objek ini diakses kembali, mereka tetap berada di kelas penyimpanan Infrequent Access.
	rule1 := oss.LifecycleRule{
		ID:     "rule1",
		Prefix: "logs",
		Status: "Enabled",
		Transitions: []oss.LifecycleTransition{
			{
				Days:                 30,
				StorageClass:         oss.StorageIA,
				IsAccessTime:         &isTrue,
				ReturnToStdWhenVisit: &isFalse,
				AllowSmallFile:       &isTrue,
			},
		},
	}
	// Tentukan aturan siklus hidup 2. Aturan ini mentransisikan semua versi noncurrent objek yang memiliki awalan "dir" dan berukuran lebih besar dari 64 KB ke kelas penyimpanan Infrequent Access 10 hari setelah waktu akses terakhirnya. Saat objek-objek ini diakses kembali, mereka dikembalikan ke kelas penyimpanan Standard.
	rule2 := oss.LifecycleRule{
		ID:     "rule2",
		Prefix: "dir",
		Status: "Enabled",
		NonVersionTransitions: []oss.LifecycleVersionTransition{
			{
				NoncurrentDays:       10,
				StorageClass:         oss.StorageIA,
				IsAccessTime:         &isTrue,
				ReturnToStdWhenVisit: &isTrue,
				AllowSmallFile:       &isFalse,
			},
		},
	}
	// Tetapkan aturan siklus hidup.
	var rules = []oss.LifecycleRule{rule1, rule2}
	err = client.SetBucketLifecycle(bucketName, rules)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Printf("%s\n", "set bucket lifecycle success")
}

Lihat aturan siklus hidup

Kode berikut menunjukkan cara melihat aturan siklus hidup untuk bucket bernama examplebucket.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Setel yourBucketName ke nama bucket Anda.
	bucketName := "yourBucketName"

	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	lcRes, err := client.GetBucketLifecycle(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	for _, rule := range lcRes.Rules {
		fmt.Println("Lifecycle Rule Id:", rule.ID)
		fmt.Println("Lifecycle Rule Prefix:", rule.Prefix)
		fmt.Println("Lifecycle Rule Status:", rule.Status)
		if rule.Expiration != nil {
			fmt.Println("Lifecycle Rule Expiration Days:", rule.Expiration.Days)
			fmt.Println("Lifecycle Rule Expiration Date:", rule.Expiration.Date)
			fmt.Println("Lifecycle Rule Expiration Created Before Date:", rule.Expiration.CreatedBeforeDate)
			if rule.Expiration.ExpiredObjectDeleteMarker != nil {
				fmt.Println("Lifecycle Rule Expiration Expired Object DeleteMarker:", *rule.Expiration.ExpiredObjectDeleteMarker)
			}
		}

		for _, tag := range rule.Tags {
			fmt.Println("Lifecycle Rule Tag Key:", tag.Key)
			fmt.Println("Lifecycle Rule Tag Value:", tag.Value)
		}

		for _, transition := range rule.Transitions {
			fmt.Println("Lifecycle Rule Transition Days:", transition.Days)
			fmt.Println("Lifecycle Rule Transition Created Before Date:", transition.CreatedBeforeDate)
			fmt.Println("Lifecycle Rule Transition Storage Class:", transition.StorageClass)
			if transition.IsAccessTime != nil {
				fmt.Println("Lifecycle Rule Transition Is Access Time:", *transition.IsAccessTime)
			}
			if transition.ReturnToStdWhenVisit != nil {
				fmt.Println("Lifecycle Rule Transition Return To Std When Visit:", *transition.ReturnToStdWhenVisit)
			}

			if transition.AllowSmallFile != nil {
				fmt.Println("Lifecycle Rule Transition Allow Small File:", *transition.AllowSmallFile)
			}

		}
		if rule.AbortMultipartUpload != nil {
			fmt.Println("Lifecycle Rule Abort Multipart Upload Days:", rule.AbortMultipartUpload.Days)
			fmt.Println("Lifecycle Rule Abort Multipart Upload Created Before Date:", rule.AbortMultipartUpload.CreatedBeforeDate)
		}

		if rule.NonVersionExpiration != nil {
			fmt.Println("Lifecycle Non Version Expiration Non Current Days:", rule.NonVersionExpiration.NoncurrentDays)
		}

		for _, nonVersionTransition := range rule.NonVersionTransitions {
			fmt.Println("Lifecycle Rule Non Version Transitions Non current Days:", nonVersionTransition.NoncurrentDays)
			fmt.Println("Lifecycle Rule Non Version Transition Storage Class:", nonVersionTransition.StorageClass)
			if nonVersionTransition.IsAccessTime != nil {
				fmt.Println("Lifecycle Rule Non Version Transition Is Access Time:", *nonVersionTransition.IsAccessTime)
			}

			if nonVersionTransition.ReturnToStdWhenVisit != nil {
				fmt.Println("Lifecycle Rule Non Version Transition Return To Std When Visit:", *nonVersionTransition.ReturnToStdWhenVisit)
			}

			if nonVersionTransition.AllowSmallFile != nil {
				fmt.Println("Lifecycle Rule Non Version Allow Small File:", *nonVersionTransition.AllowSmallFile)
			}

			if rule.Filter != nil {
				if rule.Filter.ObjectSizeGreaterThan != nil {
					fmt.Println("Lifecycle Rule Filter Object Size Greater Than:", *rule.Filter.ObjectSizeGreaterThan)
				}
				if rule.Filter.ObjectSizeLessThan != nil {
					fmt.Println("Lifecycle Rule Filter Object Size Less Than:", *rule.Filter.ObjectSizeLessThan)
				}
				for _, filterNot := range rule.Filter.Not {
					fmt.Println("Lifecycle Rule Filter Not Prefix:", filterNot.Prefix)
					if filterNot.Tag != nil {
						fmt.Println("Lifecycle Rule Filter Not Tag Key:", filterNot.Tag.Key)
						fmt.Println("Lifecycle Rule Filter Not Tag Value:", filterNot.Tag.Value)
					}
				}
			}
		}
	}
}

Hapus aturan siklus hidup

Kode berikut menunjukkan cara menghapus semua aturan siklus hidup untuk bucket bernama examplebucket. Untuk menghapus satu atau beberapa aturan siklus hidup, lihat Bagaimana cara menghapus satu atau beberapa aturan siklus hidup?.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Setel yourBucketName ke nama bucket Anda.
	bucketName := "yourBucketName"

	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Hapus semua aturan siklus hidup.
	err = client.DeleteBucketLifecycle(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

Referensi

  • Untuk kode contoh lengkap mengenai aturan siklus hidup, lihat contoh di GitHub.

  • Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk menetapkan aturan siklus hidup, lihat PutBucketLifecycle.

  • Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk melihat aturan siklus hidup, lihat GetBucketLifecycle.

  • Untuk informasi selengkapnya mengenai operasi API yang dapat Anda panggil untuk menghapus semua aturan siklus hidup, lihat DeleteBucketLifecycle.