すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:データレプリケーション (Go SDK V2)

最終更新日:Nov 09, 2025

データレプリケーション機能を使用すると、オブジェクトとオブジェクトに対して実行された操作 (オブジェクトの作成、上書き、削除など) を、ソースバケットからターゲットバケットに自動的に同期できます。OSS は、クロスリージョンレプリケーション (CRR) と同一リージョン内レプリケーション (SRR) の 2 つのデータレプリケーション機能を提供します。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) リージョン ID の cn-hangzhou を使用します。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。同じリージョン内の他の Alibaba Cloud サービスからバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。OSS がサポートするリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を構成する方法の詳細については、「アクセス認証情報を構成する」をご参照ください。

  • デフォルトでは、Alibaba Cloud アカウントにはデータレプリケーション関連の権限が付与されています。RAM ユーザーとして、またはセキュリティトークンサービス (STS) によって提供される一時的なアクセス資格情報を使用してデータをレプリケートする場合は、必要な権限が必要です。例:

    • データレプリケーションを有効にするには、oss:PutBucketReplication 権限が必要です。

    • レプリケーション時間制御 (RTC) を有効または無効にするには、oss:PutBucketRtc 権限が必要です。

    • データレプリケーションルールを表示するには、oss:GetBucketReplication 権限が必要です。

    • データをレプリケートできるターゲットリージョンを表示するには、oss:GetBucketReplicationLocation 権限が必要です。

    • データレプリケーションタスクの進行状況を表示するには、oss:GetBucketReplicationProgress 権限が必要です。

    • データレプリケーションを無効にするには、oss:DeleteBucketReplication 権限が必要です。

サンプルコード

データレプリケーションを有効にする

重要

データレプリケーションを有効にする前に、ソースバケットとターゲットバケットのバージョン管理が有効になっていないか、バージョン管理が有効になっていることを確認してください。

次のコードは、データレプリケーションを有効にする方法の例を示しています。ソースバケットとターゲットバケットは、同じリージョンまたは異なるリージョンに配置できます。

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 // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	var (
		targetBucket   = "target bucket name" // ターゲットバケットの名前。
		targetLocation = "oss-cn-beijing"     // ターゲットバケットが配置されているリージョン。
	)

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。バケット名が必要です。")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。リージョンが必要です。")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットのデータレプリケーションを有効にするリクエストを作成します。
	request := &oss.PutBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		ReplicationConfiguration: &oss.ReplicationConfiguration{
			Rules: []oss.ReplicationRule{
				{
					RTC: &oss.ReplicationTimeControl{
						Status: oss.Ptr("enabled"), // RTC 機能を有効にします。
					},
					Destination: &oss.ReplicationDestination{
						Bucket:       oss.Ptr(targetBucket),   // ターゲットバケットの名前。
						Location:     oss.Ptr(targetLocation), // ターゲットバケットが配置されているリージョン。
						TransferType: oss.TransferTypeOssAcc,  // 転送のタイプ。
					},
					HistoricalObjectReplication: oss.HistoricalObjectReplicationEnabled, // 既存データレプリケーション機能を有効にします。
				},
			},
		},
	}

	// データレプリケーションを有効にします。
	result, err := client.PutBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットレプリケーションの設定に失敗しました %v", err)
	}

	// 結果を表示します。
	log.Printf("バケットレプリケーションの設定結果: %#v\n", result)
}

データレプリケーションルールをクエリする

次のコードは、バケットのデータレプリケーションルールをクエリする方法の例を示しています。

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 // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。バケット名が必要です。")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。リージョンが必要です。")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットのデータレプリケーションルールをクエリするリクエストを作成します。
	request := &oss.GetBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// クエリ操作を実行します。
	getResult, err := client.GetBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットレプリケーションの取得に失敗しました %v", err)
	}

	// 結果を表示します。
	log.Printf("バケットレプリケーションの取得結果: %#v\n", getResult)
}

RTC 機能を有効または無効にする

次のコードは、CRR ルールの RTC 機能を有効または無効にする方法の例を示しています。

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 // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	var (
		ruleId = "replication id"
	)

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。バケット名が必要です。")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。リージョンが必要です。")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// RTC 機能を有効または無効にするリクエストを作成します。
	request := &oss.PutBucketRtcRequest{
		Bucket: oss.Ptr(bucketName),
		RtcConfiguration: &oss.RtcConfiguration{
			RTC: &oss.ReplicationTimeControl{
				Status: oss.Ptr("enabled"),
			},
			ID: oss.Ptr(ruleId), // レプリケーションルールの ID を指定します。
		},
	}

	// RTC 機能を有効または無効にする操作を実行します。
	result, err := client.PutBucketRtc(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケット RTC の設定に失敗しました %v", err)
	}

	// 結果を表示します。
	log.Printf("バケット RTC の設定結果: %#v\n", result)
}

データをレプリケートできるリージョンをクエリする

次のコードは、バケットからデータをレプリケートできるリージョンをクエリする方法の例を示しています。

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 // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。バケット名が必要です。")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。リージョンが必要です。")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// ソースバケット内のデータをレプリケートできるリージョンをクエリするリクエストを作成します。
	request := &oss.GetBucketReplicationLocationRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// クエリ操作を実行します。
	result, err := client.GetBucketReplicationLocation(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットレプリケーションロケーションの取得に失敗しました %v", err)
	}

	// リージョンに関する情報を表示します。
	for _, location := range result.ReplicationLocation.Locations {
		log.Printf("バケットレプリケーションロケーション: %s", location)
	}

	// RTC 機能を有効にできるリージョンを表示します。
	for _, rtcLocation := range result.ReplicationLocation.LocationRTCConstraint.Locations {
		log.Printf("バケットレプリケーションロケーション RTC ロケーション: %s", rtcLocation)
	}
}

データレプリケーショントスクの進捗状況をクエリする

説明

既存データレプリケーショントスクと増分データレプリケーショントスクの進捗状況をクエリできます。

  • 既存データレプリケーショントスクの進捗状況はパーセンテージで表されます。既存データレプリケーションが有効になっているバケットについてのみ、既存データレプリケーショントスクの進捗状況をクエリできます。

  • 増分データレプリケーショントスクの進捗状況は、特定の時点として表されます。その時点より前にソースバケットに保存されているデータがレプリケートされます。

次のコードは、バケット内の特定のレプリケーションルール ID を持つデータレプリケーショントスクの進捗状況をクエリする方法の例を示しています。

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 // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	// レプリケーションルールの ID を指定します。
	var ruleId = "replication id"

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。バケット名が必要です。")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。リージョンが必要です。")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// データレプリケーショントスクの進捗状況をクエリするリクエストを作成します。
	request := &oss.GetBucketReplicationProgressRequest{
		Bucket: oss.Ptr(bucketName),
		RuleId: oss.Ptr(ruleId), // レプリケーションルールの ID を指定します。
	}

	// クエリ操作を実行します。
	result, err := client.GetBucketReplicationProgress(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットレプリケーションの進捗状況の取得に失敗しました %v", err)
	}

	// データレプリケーショントスクの進捗状況を表示します。
	for _, repProgressRule := range result.ReplicationProgress.Rules {
		log.Printf("ルール ID: %s", repProgressRule.ID)
		log.Printf("ステータス: %s", repProgressRule.Status)
		log.Printf("レプリケーション進捗ルール ターゲットバケット: %s", *repProgressRule.Destination.Bucket)
		log.Printf("レプリケーション進捗ルール ターゲットロケーション: %s", *repProgressRule.Destination.Location)
		log.Printf("レプリケーション進捗ルール ターゲット転送タイプ: %v", repProgressRule.Destination.TransferType)
		log.Printf("レプリケーション進捗ルール 既存データオブジェクトレプリケーション: %s", *repProgressRule.HistoricalObjectReplication)
	}
}

データレプリケーションを無効にする

指定したソースバケットに構成されているレプリケーションルールを削除することで、バケットのデータレプリケーションを無効にできます。

次のコードは、特定の ID を持つレプリケーションルールを削除する方法の例を示しています。

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 // バケットの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	// レプリケーションルールの ID を指定します。
	var ruleId = "replication id"

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。バケット名が必要です。")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("無効なパラメータです。リージョンが必要です。")
	}

	// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// バケットに構成されているデータレプリケーションルールを削除するリクエストを作成します。
	request := &oss.DeleteBucketReplicationRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		ReplicationRules: &oss.ReplicationRules{
			IDs: []string{ruleId}, // レプリケーションルール ID のリスト。
		},
	}

	// データレプリケーションルールを削除する操作を実行します。
	result, err := client.DeleteBucketReplication(context.TODO(), request)
	if err != nil {
		log.Fatalf("バケットレプリケーションの削除に失敗しました %v", err)
	}

	// 結果を表示します。
	log.Printf("バケットレプリケーションの削除結果: %#v\n", result)
}

関連情報

  • データレプリケーションを有効にするために呼び出すことができる API 操作の詳細については、「PutBucketReplication」をご参照ください。

  • 既存の CRR ルールの RTC 機能を有効または無効にするための API 操作の詳細については、「PutBucketRTC」をご参照ください。

  • データレプリケーションルールをクエリするための API 操作の詳細については、「GetBucketReplication」をご参照ください。

  • データをレプリケートできるリージョンをクエリするための API 操作の詳細については、「GetBucketReplicationLocation」をご参照ください。

  • データレプリケーショントスクの進捗状況をクエリするための API 操作の詳細については、「GetBucketReplicationProgress」をご参照ください。

  • データレプリケーションを無効にするための API 操作の詳細については、「DeleteBucketReplication」をご参照ください。