All Products
Search
Document Center

Object Storage Service:Kebijakan retensi dengan OSS SDK untuk Go 2.0

Last Updated:Mar 21, 2026

Gunakan OSS SDK untuk Go 2.0 guna membuat, mengunci, mengkueri, dan mengelola kebijakan retensi berbasis waktu (WORM) pada bucket. Periode retensi berkisar antara 1 hari hingga 70 tahun.

Catatan penggunaan

  • Kode contoh menggunakan ID wilayah cn-hangzhou untuk wilayah China (Hangzhou). Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam bucket. Untuk mengakses sumber daya dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya, lihat Wilayah dan titik akhir OSS.

  • Kredensial akses dalam kode contoh dimuat dari variabel lingkungan. Untuk petunjuk konfigurasi, lihat Konfigurasikan kredensial akses.

Ringkasan API

OperasiMetodeStatus yang diperlukan
Buat kebijakan retensiInitiateBucketWorm
Batalkan kebijakan retensiAbortBucketWormInProgress
Kunci kebijakan retensiCompleteBucketWormInProgress
Kueri kebijakan retensiGetBucketWormAny
Perpanjang periode retensiExtendBucketWormLocked

Buat kebijakan retensi

Panggil InitiateBucketWorm untuk membuat kebijakan retensi berbasis waktu pada bucket. Tanggapan mencakup WormId yang diperlukan untuk operasi penguncian dan perpanjangan berikutnya.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.InitiateBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		InitiateWormConfiguration: &oss.InitiateWormConfiguration{
			RetentionPeriodInDays: oss.Ptr(int32(30)), // Atur periode retensi menjadi 30 hari.
		},
	}

	result, err := client.InitiateBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memulai bucket worm %v", err)
	}

	// result.WormId diperlukan untuk mengunci atau memperpanjang kebijakan ini.
	log.Printf("hasil initiate bucket worm:%#v\n", result)
}

Batalkan kebijakan retensi

Hanya kebijakan dalam status InProgress (belum terkunci) yang dapat dibatalkan. Panggil AbortBucketWorm untuk menghapusnya.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	var (
		wormId = "worm id" // Ganti dengan WormId yang dikembalikan oleh InitiateBucketWorm.
	)
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	// Kebijakan harus berada dalam status InProgress sebelum dapat dikunci.
	request := &oss.CompleteBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		WormId: oss.Ptr(wormId),
	}

	result, err := client.CompleteBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menyelesaikan bucket worm %v", err)
	}

	log.Printf("hasil penyelesaian bucket worm:%#v\n", result)
}

Kunci kebijakan retensi

Mengunci kebijakan menjadikannya permanen dan tidak dapat diubah — setelah dikunci, kebijakan tersebut tidak dapat dibatalkan atau diperpendek. Hanya kebijakan dalam status InProgress yang dapat dikunci. Dapatkan wormId dari tanggapan InitiateBucketWorm (result.WormId).

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	var (
		wormId = "worm id" // Ganti dengan WormId yang dikembalikan oleh InitiateBucketWorm.
	)
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	// Kebijakan harus dalam status InProgress sebelum dapat dikunci.
	request := &oss.CompleteBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		WormId: oss.Ptr(wormId),
	}

	result, err := client.CompleteBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menyelesaikan bucket worm %v", err)
	}

	log.Printf("hasil complete bucket worm:%#v\n", result)
}

Kueri kebijakan retensi

Panggil GetBucketWorm untuk mengambil konfigurasi dan status kebijakan retensi saat ini untuk suatu bucket.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.GetBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.GetBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan bucket worm %v", err)
	}

	log.Printf("hasil get bucket worm:%#v\n", result)
}

Perpanjang periode retensi

Setelah kebijakan dikunci, periode retensi hanya dapat diperpanjang, tidak dapat diperpendek. Panggil ExtendBucketWorm dengan nilai RetentionPeriodInDays baru yang lebih besar daripada periode saat ini. Dapatkan wormId dari tanggapan InitiateBucketWorm (result.WormId).

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	var (
		wormId = "worm id" // Ganti dengan WormId yang dikembalikan oleh InitiateBucketWorm.
	)
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	// Kebijakan harus dalam status Locked. Periode baru harus lebih panjang daripada periode saat ini.
	request := &oss.ExtendBucketWormRequest{
		Bucket: oss.Ptr(bucketName),
		WormId: oss.Ptr(wormId),
		ExtendWormConfiguration: &oss.ExtendWormConfiguration{
			RetentionPeriodInDays: oss.Ptr(int32(30)), // Perpanjang periode retensi menjadi 30 hari.
		},
	}

	result, err := client.ExtendBucketWorm(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memperpanjang bucket worm %v", err)
	}

	log.Printf("hasil extend bucket worm:%#v\n", result)
}

Referensi