全部产品
Search
文档中心

Object Storage Service:Replikasi data (Go SDK V2)

更新时间:Nov 09, 2025

Gunakan fitur replikasi data untuk secara otomatis menyinkronkan objek dan operasi seperti pembuatan, penimpaan, serta penghapusan dari bucket sumber ke bucket tujuan. OSS menawarkan dua jenis replikasi: replikasi lintas wilayah (CRR) dan replikasi dalam wilayah yang sama (SRR).

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah China (Hangzhou), cn-hangzhou. Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam bucket. Jika Anda ingin mengakses sumber daya dalam bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk detail konfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.

  • Secara default, Akun Alibaba Cloud memiliki izin terkait replikasi data. Jika Anda ingin mereplikasi data sebagai Pengguna RAM atau menggunakan kredensial akses sementara yang disediakan oleh Layanan Token Keamanan (STS), Anda harus memiliki izin yang diperlukan. Contohnya:

    • Untuk mengaktifkan replikasi data, Anda memerlukan izin oss:PutBucketReplication.

    • Untuk mengaktifkan atau menonaktifkan kontrol waktu replikasi (RTC), Anda memerlukan izin oss:PutBucketRtc.

    • Untuk melihat aturan replikasi data, Anda memerlukan izin oss:GetBucketReplication.

    • Untuk melihat wilayah tujuan ke mana data dapat direplikasi, Anda memerlukan izin oss:GetBucketReplicationLocation.

    • Untuk melihat kemajuan tugas replikasi data, Anda memerlukan izin oss:GetBucketReplicationProgress.

    • Untuk menonaktifkan replikasi data, Anda memerlukan izin oss:DeleteBucketReplication.

Kode Contoh

Aktifkan replikasi data

Penting

Sebelum mengaktifkan replikasi data, pastikan bahwa bucket sumber dan tujuan tidak memiliki versi atau telah diaktifkan fitur versi.

Berikut adalah contoh kode untuk mengaktifkan replikasi data. Bucket sumber dan tujuan dapat berada di wilayah yang sama atau berbeda.

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	var (
		targetBucket   = "nama bucket tujuan" // Nama bucket tujuan.
		targetLocation = "oss-cn-beijing"     // Wilayah tempat bucket tujuan berada.
	)

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

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

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengaktifkan replikasi data untuk bucket.
	request := &oss.PutBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		ReplicationConfiguration: &oss.ReplicationConfiguration{
			Rules: []oss.ReplicationRule{
				{
					RTC: &oss.ReplicationTimeControl{
						Status: oss.Ptr("enabled"), // Aktifkan fitur RTC.
					},
					Destination: &oss.ReplicationDestination{
						Bucket:       oss.Ptr(targetBucket),   // Nama bucket tujuan.
						Location:     oss.Ptr(targetLocation), // Wilayah tempat bucket tujuan berada.
						TransferType: oss.TransferTypeOssAcc,  // Jenis transfer.
					},
					HistoricalObjectReplication: oss.HistoricalObjectReplicationEnabled, // Aktifkan fitur replikasi data historis.
				},
			},
		},
	}

	// Aktifkan replikasi data.
	result, err := client.PutBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memasukkan replikasi bucket %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil replikasi bucket:%#v\n", result)
}

Kueri aturan replikasi data

Berikut adalah contoh kode untuk menanyakan aturan replikasi data 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"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

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

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

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menanyakan aturan replikasi data bucket.
	request := &oss.GetBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// Lakukan operasi penanyaan.
	getResult, err := client.GetBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan replikasi bucket %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil replikasi bucket:%#v\n", getResult)
}

Aktifkan atau nonaktifkan fitur RTC

Berikut adalah contoh kode untuk mengaktifkan atau menonaktifkan fitur RTC pada aturan CRR.

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	var (
		ruleId = "id replikasi"
	)

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

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

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengaktifkan atau menonaktifkan fitur RTC.
	request := &oss.PutBucketRtcRequest{
		Bucket: oss.Ptr(bucketName),
		RtcConfiguration: &oss.RtcConfiguration{
			RTC: &oss.ReplicationTimeControl{
				Status: oss.Ptr("enabled"),
			},
			ID: oss.Ptr(ruleId), // Tentukan ID aturan replikasi.
		},
	}

	// Lakukan operasi untuk mengaktifkan atau menonaktifkan fitur RTC.
	result, err := client.PutBucketRtc(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memasukkan rtc bucket %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil rtc bucket:%#v\n", result)
}

Tanyakan wilayah ke mana data dapat direplikasi

Berikut adalah contoh kode untuk menanyakan wilayah tujuan replikasi data dari 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"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

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

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

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menanyakan wilayah ke mana data di bucket sumber dapat direplikasi.
	request := &oss.GetBucketReplicationLocationRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// Lakukan operasi penanyaan.
	result, err := client.GetBucketReplicationLocation(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan lokasi replikasi bucket %v", err)
	}

	// Tampilkan informasi tentang wilayah.
	for _, location := range result.ReplicationLocation.Locations {
		log.Printf("Lokasi Replikasi Bucket: %s", location)
	}

	// Tampilkan wilayah untuk mana fitur RTC dapat diaktifkan.
	for _, rtcLocation := range result.ReplicationLocation.LocationRTCConstraint.Locations {
		log.Printf("Lokasi RTC Lokasi Replikasi Bucket: %s", rtcLocation)
	}
}

Tanyakan kemajuan tugas replikasi data

Catatan

Anda dapat menanyakan kemajuan tugas replikasi data historis dan tambahan.

  • Kemajuan tugas replikasi data historis dinyatakan dalam persentase. Hanya bucket dengan replikasi data historis yang dapat ditanyakan.

  • Kemajuan tugas replikasi data tambahan dinyatakan dalam titik waktu. Data sebelum titik waktu tersebut direplikasi.

Berikut adalah contoh kode untuk menanyakan kemajuan tugas replikasi data dengan ID aturan tertentu di 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"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Tentukan ID aturan replikasi.
	var ruleId = "id replikasi"

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

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

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menanyakan kemajuan tugas replikasi data.
	request := &oss.GetBucketReplicationProgressRequest{
		Bucket: oss.Ptr(bucketName),
		RuleId: oss.Ptr(ruleId), // Tentukan ID aturan replikasi.
	}

	// Lakukan operasi penanyaan.
	result, err := client.GetBucketReplicationProgress(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan kemajuan replikasi bucket %v", err)
	}

	// Tampilkan kemajuan tugas replikasi data.
	for _, repProgressRule := range result.ReplicationProgress.Rules {
		log.Printf("ID Aturan: %s", repProgressRule.ID)
		log.Printf("Status: %s", repProgressRule.Status)
		log.Printf("Tujuan Aturan Kemajuan Replikasi Bucket: %s", *repProgressRule.Destination.Bucket)
		log.Printf("Lokasi Tujuan Aturan Kemajuan Replikasi Bucket: %s", *repProgressRule.Destination.Location)
		log.Printf("Jenis Transfer Tujuan Aturan Kemajuan Replikasi Bucket: %v", repProgressRule.Destination.TransferType)
		log.Printf("Replikasi Objek Historis Aturan Kemajuan Replikasi: %s", *repProgressRule.HistoricalObjectReplication)
	}
}

Nonaktifkan replikasi data

Untuk menonaktifkan replikasi data, hapus aturan replikasi yang dikonfigurasikan untuk bucket sumber tertentu.

Berikut adalah contoh kode untuk menghapus aturan replikasi dengan ID 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.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Tentukan ID aturan replikasi.
	var ruleId = "id replikasi"

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

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

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menghapus aturan replikasi data yang dikonfigurasikan untuk bucket.
	request := &oss.DeleteBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		ReplicationRules: &oss.ReplicationRules{
			IDs: []string{ruleId}, // Daftar ID aturan replikasi.
		},
	}

	// Lakukan operasi untuk menghapus aturan replikasi data.
	result, err := client.DeleteBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menghapus replikasi bucket %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil penghapusan replikasi bucket:%#v\n", result)
}

Referensi

  • Untuk detail operasi API yang digunakan untuk mengaktifkan replikasi data, lihat PutBucketReplication.

  • Untuk detail operasi API yang digunakan untuk mengaktifkan atau menonaktifkan fitur RTC pada aturan CRR, lihat PutBucketRTC.

  • Untuk detail operasi API yang digunakan untuk menanyakan aturan replikasi data, lihat GetBucketReplication.

  • Untuk detail operasi API yang digunakan untuk menanyakan wilayah tujuan replikasi data, lihat GetBucketReplicationLocation.

  • Untuk detail operasi API yang digunakan untuk menanyakan kemajuan tugas replikasi data, lihat GetBucketReplicationProgress.

  • Untuk detail operasi API yang digunakan untuk menonaktifkan replikasi data, lihat DeleteBucketReplication.