Topik ini menjelaskan cara menggunakan Go SDK V2 untuk mengelola fitur siklus hidup pada bucket.
Informasi latar belakang
Di OSS, tidak semua data yang diunggah memerlukan akses yang sering. Untuk kepatuhan data atau pengarsipan, beberapa data harus dipindahkan ke penyimpanan dingin. Anda dapat memilih salah satu dari jenis aturan berikut sesuai kebutuhan:
Aturan siklus hidup berdasarkan waktu modifikasi terakhir: Jika data tidak dimodifikasi dalam jangka waktu lama dan tidak perlu disimpan lagi, Anda dapat menggunakan aturan ini untuk menghapus data secara batch atau mengonversinya ke kelas penyimpanan dingin guna membebaskan ruang penyimpanan.
Aturan siklus hidup berdasarkan waktu akses terakhir: Anda dapat mengaktifkan aturan ini agar OSS secara otomatis memantau pola akses data, mengidentifikasi data dingin, dan secara dinamis mengonversi kelas penyimpanannya. OSS mengidentifikasi data yang tidak diakses dalam jangka waktu lama dan mengonversinya ke kelas penyimpanan dingin yang lebih hemat biaya. Ini memungkinkan tiering penyimpanan otomatis dan mengurangi biaya penyimpanan.
Catatan
Sebelum mengonfigurasi aturan siklus hidup berdasarkan waktu modifikasi terakhir atau waktu akses terakhir untuk objek, pastikan Anda memahami fitur ini. Untuk informasi lebih lanjut, lihat Aturan siklus hidup berdasarkan waktu modifikasi terakhir dan Aturan siklus hidup berdasarkan waktu akses terakhir.
Kode contoh dalam topik ini menggunakan Wilayah China (Hangzhou) (ID wilayah:
cn-hangzhou) sebagai contoh. Secara default, titik akhir publik digunakan. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, Anda dapat menggunakan titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah OSS dan titik akhir, lihat Wilayah dan titik akhir OSS.Topik ini memberikan contoh cara membaca kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses.
Untuk menetapkan aturan siklus hidup, Anda harus memiliki izin
oss:PutBucketLifecycle. Untuk menanyakan aturan siklus hidup, Anda harus memiliki izinoss:GetBucketLifecycle. Untuk menghapus semua aturan siklus hidup, Anda harus memiliki izinoss:DeleteBucketLifecycle. Untuk informasi lebih lanjut, lihat Berikan kebijakan kustom kepada Pengguna RAM.
Tetapkan aturan siklus hidup
Kode berikut memberikan contoh cara menetapkan aturan siklus hidup berdasarkan waktu modifikasi terakhir dan waktu akses terakhir. Setelah mengonfigurasi aturan tersebut, jika Anda ingin memodifikasi satu atau lebih aturan, lihat Bagaimana cara memodifikasi satu atau lebih konfigurasi aturan siklus hidup?.
Konversikan kelas penyimpanan file berdasarkan kebijakan waktu modifikasi terakhir
Kode berikut memberikan contoh cara menetapkan aturan siklus hidup untuk bucket guna mengonversi kelas penyimpanan file berdasarkan waktu modifikasi terakhir.
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"
)
// Tentukan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan tetapkan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk menetapkan aturan siklus hidup untuk bucket.
request := &oss.PutBucketLifecycleRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
LifecycleConfiguration: &oss.LifecycleConfiguration{
Rules: []oss.LifecycleRule{
{
// Tentukan aturan siklus hidup rule1. Dalam aturan ini, file yang memiliki awalan foo dan tag key k1 serta nilai tag v1 dikonversi ke kelas penyimpanan Infrequent Access 30 hari setelah terakhir dimodifikasi.
Status: oss.Ptr("Enabled"),
ID: oss.Ptr("rule1"),
Prefix: oss.Ptr("foo/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(30)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(false), // Tetapkan nilainya menjadi false. Kebijakan didasarkan pada waktu modifikasi terakhir.
},
},
Tags: []oss.Tag{
{
Key: oss.Ptr("k1"),
Value: oss.Ptr("v1"),
},
},
},
{
// Tentukan aturan siklus hidup rule2. Dalam aturan ini, untuk objek yang memiliki awalan dir di bucket dengan pengendalian versi diaktifkan, jika sebuah objek hanya memiliki penanda hapus, penanda hapus akan dihapus secara otomatis. Versi noncurrent dari objek kedaluwarsa dan dihapus setelah 30 hari. Versi noncurrent dari objek dikonversi ke kelas penyimpanan IA setelah 10 hari.
ID: oss.Ptr("rule2"),
Prefix: oss.Ptr("dir/"),
Status: oss.Ptr("Enabled"),
Expiration: &oss.LifecycleRuleExpiration{
Days: oss.Ptr(int32(10)),
ExpiredObjectDeleteMarker: oss.Ptr(true),
},
NoncurrentVersionExpiration: &oss.NoncurrentVersionExpiration{
NoncurrentDays: oss.Ptr(int32(30)),
},
NoncurrentVersionTransitions: []oss.NoncurrentVersionTransition{{
NoncurrentDays: oss.Ptr(int32(10)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(false), // Tetapkan nilainya menjadi false. Kebijakan didasarkan pada waktu modifikasi terakhir.
}},
},
},
},
}
// Tetapkan aturan siklus hidup untuk bucket.
result, err := client.PutBucketLifecycle(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menempatkan siklus hidup bucket %v", err)
}
// Cetak hasil penetapan aturan siklus hidup untuk bucket.
log.Printf("hasil siklus hidup bucket:%#v\n", result)
}
Konversikan kelas penyimpanan file berdasarkan kebijakan waktu modifikasi terakhir, kecuali file dengan awalan dan tag tertentu
Kode berikut memberikan contoh cara mengonversi kelas penyimpanan file di bucket ke Infrequent Access 30 hari setelah terakhir dimodifikasi. Aturan ini berlaku untuk file yang tidak memiliki awalan log, tidak memiliki tag dengan kunci key1 dan nilai value1, dan memenuhi kondisi ukuran tertentu.
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"
)
// Tentukan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan tetapkan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk menetapkan aturan siklus hidup untuk bucket.
request := &oss.PutBucketLifecycleRequest{
Bucket: oss.Ptr(bucketName),
LifecycleConfiguration: &oss.LifecycleConfiguration{
Rules: []oss.LifecycleRule{
{
// Tentukan aturan siklus hidup rule1. Dalam aturan ini, konversikan kelas penyimpanan file ke Infrequent Access 30 hari setelah terakhir dimodifikasi, kecuali file yang memiliki awalan log, memiliki tag dengan kunci key1 dan nilai value1, dan memenuhi kondisi ukuran tertentu.
ID: oss.Ptr("rule1"),
Status: oss.Ptr("Enabled"),
Prefix: oss.Ptr("logs/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(30)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(false), // Tetapkan nilainya menjadi false. Kebijakan didasarkan pada waktu modifikasi terakhir.
},
},
Filter: &oss.LifecycleRuleFilter{
ObjectSizeGreaterThan: oss.Ptr(int64(500)),
ObjectSizeLessThan: oss.Ptr(int64(1000)),
Not: &oss.LifecycleRuleNot{
Prefix: oss.Ptr("logs/log"),
Tag: &oss.Tag{
Key: oss.Ptr("key1"),
Value: oss.Ptr("value1"),
},
},
},
},
},
},
}
// Tetapkan aturan siklus hidup untuk bucket.
result, err := client.PutBucketLifecycle(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menempatkan siklus hidup bucket %v", err)
}
// Cetak hasil penetapan aturan siklus hidup untuk bucket.
log.Printf("hasil siklus hidup bucket:%#v\n", result)
}
Konversikan kelas penyimpanan file berdasarkan kebijakan waktu akses terakhir
Kode berikut memberikan contoh cara menetapkan aturan siklus hidup untuk bucket guna mengonversi kelas penyimpanan file berdasarkan waktu akses terakhir.
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"
)
// Tentukan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan tetapkan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk menetapkan aturan siklus hidup untuk bucket.
request := &oss.PutBucketLifecycleRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
LifecycleConfiguration: &oss.LifecycleConfiguration{
Rules: []oss.LifecycleRule{
{
// Dalam aturan siklus hidup 1, tentukan bahwa semua file dengan awalan data/ dikonversi ke kelas penyimpanan Infrequent Access 200 hari setelah terakhir diakses. Ketika file dengan awalan data/ diakses kembali, mereka tetap berada di kelas penyimpanan Infrequent Access.
ID: oss.Ptr("rule1"),
Status: oss.Ptr("Enabled"),
Prefix: oss.Ptr("data/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(200)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(true), // Tetapkan nilainya menjadi true. Kebijakan didasarkan pada waktu akses terakhir.
ReturnToStdWhenVisit: oss.Ptr(false),
},
},
},
{
// Dalam aturan siklus hidup 2, tentukan bahwa semua file dengan awalan log/ dikonversi ke kelas penyimpanan Infrequent Access 120 hari setelah terakhir diakses. Ketika file dengan awalan log/ diakses kembali, mereka tetap berada di kelas penyimpanan Infrequent Access.
// Dalam aturan yang sama, tentukan bahwa semua file dengan awalan log/ dikonversi ke kelas penyimpanan Arsip 250 hari setelah terakhir diakses.
ID: oss.Ptr("rule2"),
Status: oss.Ptr("Enabled"),
Prefix: oss.Ptr("log/"),
Transitions: []oss.LifecycleRuleTransition{
{
Days: oss.Ptr(int32(120)),
StorageClass: oss.StorageClassIA,
IsAccessTime: oss.Ptr(true), // Tetapkan nilainya menjadi true. Kebijakan didasarkan pada waktu akses terakhir.
ReturnToStdWhenVisit: oss.Ptr(false),
},
{
Days: oss.Ptr(int32(250)),
StorageClass: oss.StorageClassArchive,
IsAccessTime: oss.Ptr(true),
ReturnToStdWhenVisit: oss.Ptr(false),
},
},
},
},
},
}
// Tetapkan aturan siklus hidup untuk bucket.
result, err := client.PutBucketLifecycle(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menempatkan siklus hidup bucket %v", err)
}
// Cetak hasil penetapan aturan siklus hidup untuk bucket.
log.Printf("hasil siklus hidup bucket:%#v\n", result)
}
Kueri aturan siklus hidup
Kode berikut memberikan contoh cara menanyakan aturan siklus hidup.
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Tentukan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan tetapkan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk mendapatkan konfigurasi siklus hidup bucket.
request := &oss.GetBucketLifecycleRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
}
// Dapatkan konfigurasi siklus hidup bucket dan proses hasilnya.
result, err := client.GetBucketLifecycle(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mendapatkan siklus hidup bucket %v", err)
}
// Cetak informasi yang terkandung dalam aturan siklus hidup.
for _, rule := range result.LifecycleConfiguration.Rules {
fmt.Println("Id Aturan Siklus Hidup:", rule.ID)
fmt.Println("Awalan Aturan Siklus Hidup:", rule.Prefix)
fmt.Println("Status Aturan Siklus Hidup:", rule.Status)
if rule.Expiration != nil {
fmt.Println("Hari Kadaluarsa Aturan Siklus Hidup:", rule.Expiration.Days)
fmt.Println("Tanggal Dibuat Sebelum Kadaluarsa Aturan Siklus Hidup:", rule.Expiration.CreatedBeforeDate)
if rule.Expiration.ExpiredObjectDeleteMarker != nil {
fmt.Println("Penanda Hapus Objek Kadaluarsa Aturan Siklus Hidup:", *rule.Expiration.ExpiredObjectDeleteMarker)
}
}
for _, tag := range rule.Tags {
fmt.Println("Kunci Tag Aturan Siklus Hidup:", tag.Key)
fmt.Println("Nilai Tag Aturan Siklus Hidup:", tag.Value)
}
for _, transition := range rule.Transitions {
fmt.Println("Hari Transisi Aturan Siklus Hidup:", transition.Days)
fmt.Println("Tanggal Dibuat Sebelum Transisi Aturan Siklus Hidup:", transition.CreatedBeforeDate)
fmt.Println("Kelas Penyimpanan Transisi Aturan Siklus Hidup:", transition.StorageClass)
if transition.IsAccessTime != nil {
fmt.Println("Apakah Waktu Akses Transisi Aturan Siklus Hidup:", *transition.IsAccessTime)
}
if transition.ReturnToStdWhenVisit != nil {
fmt.Println("Kembalikan Ke Standar Saat Kunjungan Transisi Aturan Siklus Hidup:", *transition.ReturnToStdWhenVisit)
}
if transition.AllowSmallFile != nil {
fmt.Println("Izinkan File Kecil Transisi Aturan Siklus Hidup:", *transition.AllowSmallFile)
}
}
if rule.AbortMultipartUpload != nil {
fmt.Println("Hari Penghentian Unggah Multi-Bagian Aturan Siklus Hidup:", rule.AbortMultipartUpload.Days)
fmt.Println("Tanggal Dibuat Sebelum Penghentian Unggah Multi-Bagian Aturan Siklus Hidup:", rule.AbortMultipartUpload.CreatedBeforeDate)
}
if rule.NoncurrentVersionTransitions != nil {
for _, nonVersionTransition := range rule.NoncurrentVersionTransitions {
fmt.Println("Hari Non Versi Transisi Non Saat Ini Aturan Siklus Hidup:", nonVersionTransition.NoncurrentDays)
fmt.Println("Kelas Penyimpanan Transisi Non Versi Aturan Siklus Hidup:", nonVersionTransition.StorageClass)
if nonVersionTransition.IsAccessTime != nil {
fmt.Println("Apakah Waktu Akses Transisi Non Versi Aturan Siklus Hidup:", *nonVersionTransition.IsAccessTime)
}
if nonVersionTransition.ReturnToStdWhenVisit != nil {
fmt.Println("Kembalikan Ke Standar Saat Kunjungan Transisi Non Versi Aturan Siklus Hidup:", *nonVersionTransition.ReturnToStdWhenVisit)
}
if nonVersionTransition.AllowSmallFile != nil {
fmt.Println("Izinkan File Kecil Transisi Non Versi Aturan Siklus Hidup:", *nonVersionTransition.AllowSmallFile)
}
if rule.Filter != nil {
if rule.Filter.ObjectSizeGreaterThan != nil {
fmt.Println("Ukuran Objek Lebih Besar Dari Filter Aturan Siklus Hidup:", *rule.Filter.ObjectSizeGreaterThan)
}
if rule.Filter.ObjectSizeLessThan != nil {
fmt.Println("Ukuran Objek Lebih Kecil Dari Filter Aturan Siklus Hidup:", *rule.Filter.ObjectSizeLessThan)
}
if rule.Filter.Not != nil {
fmt.Println("Awalan Tidak Diizinkan Filter Aturan Siklus Hidup:", rule.Filter.Not.Prefix)
if rule.Filter.Not.Tag != nil {
fmt.Println("Kunci Tag Tidak Diizinkan Filter Aturan Siklus Hidup:", rule.Filter.Not.Tag.Key)
fmt.Println("Nilai Tag Tidak Diizinkan Filter Aturan Siklus Hidup:", rule.Filter.Not.Tag.Value)
}
}
}
}
}
}
}
Hapus semua aturan siklus hidup
Kode berikut memberikan contoh cara menghapus semua aturan siklus hidup dari bucket examplebucket. Jika Anda ingin menghapus satu atau lebih aturan siklus hidup, lihat Bagaimana cara menghapus satu atau lebih aturan siklus hidup?.
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"
)
// Tentukan variabel global.
var (
region string // Wilayah tempat bucket berada.
bucketName string // Nama bucket.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Muat konfigurasi default dan tetapkan penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk menghapus semua aturan siklus hidup bucket.
request := &oss.DeleteBucketLifecycleRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
}
// Hapus semua aturan siklus hidup bucket.
result, err := client.DeleteBucketLifecycle(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menghapus siklus hidup bucket %v", err)
}
// Cetak hasil penghapusan semua aturan siklus hidup bucket.
log.Printf("hasil penghapusan siklus hidup bucket:%#v\n", result)
}
Referensi
Untuk informasi lebih lanjut tentang operasi API untuk menetapkan aturan siklus hidup, lihat PutBucketLifecycle.
Untuk informasi lebih lanjut tentang operasi API untuk menanyakan aturan siklus hidup, lihat GetBucketLifecycle.
Untuk informasi lebih lanjut tentang operasi API untuk menghapus semua aturan siklus hidup, lihat DeleteBucketLifecycle.