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

Object Storage Service:アカウント内のリージョンにあるバケットから別のアカウント内の別のリージョンにある別のバケットにデータをコピーする

最終更新日:Jul 07, 2025

アカウント間のクロスリージョンレプリケーション (CRR) を使用して、Alibaba Cloud アカウント A 内のリージョンにあるバケットから Alibaba Cloud アカウント B 内の別のリージョンにある別のバケットに Object Storage Service (OSS) オブジェクトをレプリケートできます。

前提条件

  • CRR タスクのソースバケットとして機能するバケット A は、アカウント A 内のリージョンに作成されます。アカウント A の UID、バケット A の名前、およびバケット A が配置されているリージョンが記録されます。

  • アカウント A には、 oss:PutBucketReplicationoss:GetBucketReplicationoss:DeleteBucketReplication、oss:GetBucketReplicationLocation、および oss:GetBucketReplicationProgress の権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。

  • CRR タスクのデスティネーションバケットとして機能するバケット B は、アカウント B 内の別のリージョンに作成されます。アカウント B の UID、バケット B の名前、およびバケット B が配置されているリージョンが記録されます。

ロールの承認

アカウント間でデータをレプリケートするには、異なる Alibaba Cloud アカウントに属する 2 つのバケットが必要です。次の項目では、アカウント間のデータレプリケーションに必要な信頼ポリシーと最小限の権限について説明します。

  1. アカウント A を使用して、次の操作を実行します。

    1. 通常のサービロールを作成します。

      重要

      RAM ユーザーを使用して RAM ロールを作成できます。RAM ユーザーには、 ram:CreateRoleram:GetRoleram:ListRolesram:ListPoliciesForRole、および ram:AttachPolicyToRole の権限が必要です。ただし、RAM ユーザーに ram:CreateRoleram:GetRole などの権限を付与すると、セキュリティリスクが発生する可能性があります。RAM ユーザーが関連付けられている Alibaba Cloud アカウントを使用して RAM ロールを作成し、必要な権限を RAM ロールに付与できます。その後、RAM ユーザーは Alibaba Cloud アカウントによって作成された RAM ロールを引き受けることができます。

      RAM ロールを作成するときは、プリンシパルタイプを [クラウドサービス] に設定し、プリンシパル名パラメーターには [OSS] を選択します。詳細については、「通常のサービロールを作成する」をご参照ください。

      説明

      RAM ロールの作成後、後続の権限付与のために、[基本情報] セクションにある RAM ロールの Alibaba Cloud Resource Name (ARN) を記録します。

    2. ソースバケットで CRR を実行するための権限を RAM ロールに付与します。

      次のいずれかの方法を使用して、RAM ロールに権限を付与できます。

      必要なシステムポリシーを RAM ロールにアタッチする

      警告

      AliyunOSSFullAccess システムポリシーを RAM ロールにアタッチします。AliyunOSSFullAccess システムポリシーがアタッチされている RAM ロールには、現在の Alibaba Cloud アカウント内のすべてのバケットに対するすべての操作を実行するための権限があります。システムポリシーを RAM ロールにアタッチする際は注意してください。

      カスタムポリシーを RAM ロールにアタッチする

      RAM ポリシーを使用して、ソースバケットで CRR を実行するために必要な最小限の権限を RAM ロールに付与できます。

      説明

      ビジネス要件に基づいて、src-bucket をソースバケットの名前に置き換えます。

      {
         "Version":"1",
         "Statement":[
            {
               "Effect":"Allow",
               "Action":[
                  "oss:ReplicateList",
                  "oss:ReplicateGet"
               ],
               "Resource":[
                  "acs:oss:*:*:src-bucket",          	// ソースバケット名を指定します。
                  "acs:oss:*:*:src-bucket/*"       // ソースバケット名を指定します。
               ]
            }
         ]
      }

      Key Management Service (KMS) で暗号化されたオブジェクトをデスティネーションバケットにレプリケートする場合、AliyunKMSFullAccess システムポリシーを RAM ロールにアタッチする必要があります。システムポリシーを RAM ロールにアタッチする方法の詳細については、「RAM ロールに権限を付与する」をご参照ください。

  2. アカウント B を使用して、デスティネーションバケットにレプリケートするオブジェクトを受信するための権限を RAM ロールに付与します。

    方法 1: (推奨) GUI で追加

    1. OSS コンソール にログインします。

    2. 左側のナビゲーションウィンドウで、バケット をクリックします。「ベケットリスト」ページで、dest-bucket という名前のバケットを見つけ、バケット名をクリックします。

    3. 左側のナビゲーションツリーで、権限管理 > バケット承認ポリシー を選択します。

    4. バケット承認ポリシー タブで、GUI で追加 をクリックし、次に レプリケーションオブジェクトの受信 をクリックします。

    5. [レプリケートするオブジェクトを受信] パネルで、UID および RAM ロールの取得方法[レプリケーションのソース RAM ロール ARN] に設定し、[レプリケーションのソース RAM ロール ARN]手順 1 で作成した RAM ロールの ARN を入力し、[目的] には [アカウント間のレプリケーション] を選択します。

    6. ポリシーの生成 をクリックします。

    方法 2: 構文で追加

    1. 左側のナビゲーションツリーで、権限管理 > バケット承認ポリシー を選択します。

    2. バケット承認ポリシー タブで、構文で追加 をクリックし、次に [編集] をクリックします。

    3. コードエディターに次のバケットポリシーを入力します。

      重要
      • ポリシー ステートメントを指定してバケットポリシーを構成し、RAM ロールに必要な権限を付与する場合、新しいバケットポリシーは既存のバケットポリシーを上書きします。新しいバケットポリシーに既存のバケットポリシーの内容が含まれていることを確認してください。そうでない場合、既存のバケットポリシーの承認が失敗する可能性があります。

      • ビジネス要件に基づいて、ロール名を、作成した RAM ロールの名前に置き換えます。作成した RAM ロールの名前に大文字が含まれている場合は、小文字に変換する必要があります。 たとえば、作成した RAM ロールの名前が AliyunOssDrsRole の場合、AliyunOssDrsRole を aliyunossdrsrole に変換する必要があります。次の例では、デスティネーションバケットの名前は dest-bucket、ソースバケットが属するアカウントの UID は 137918634953xxxx、デスティネーションバケットが属するアカウントの UID は 111933544165xxxx です。

      {
         "Version":"1",
         "Statement":[
            {
              "Effect":"Allow",
              "Action":[
                  "oss:ReplicateList",  // レプリケーションタスクを一覧表示します。
                  "oss:ReplicateGet",   // レプリケーションタスクの構成を取得します。
                  "oss:ReplicatePut",   // オブジェクトをレプリケートします。
                  "oss:ReplicateDelete"  // オブジェクトのレプリカを削除します。
               ],
              "Principal": [
                  "arn:sts::137918634953xxxx:assumed-role/aliyunossdrsrole/*" // ソースバケットが属するアカウントの UID と RAM ロールの名前を指定します。
      		 ],
               "Resource":[
                  "acs:oss:*:111933544165xxxx:dest-bucket",          	// デスティネーションバケットが属するアカウントの UID とデスティネーションバケットの名前を指定します。
                  "acs:oss:*:111933544165xxxx:dest-bucket/*"       // デスティネーションバケットが属するアカウントの UID とデスティネーションバケットの名前を指定します。
               ]
            }
         ]
      }
    4. [保存] をクリックします。表示されるメッセージで、「OK」をクリックします。

SSE-KMS を使用して暗号化されたオブジェクトをレプリケートする

説明

SSE-KMS を使用して暗号化されたオブジェクトは、中国 (杭州)、中国 (上海)、中国 (深圳)、中国 (河源)、中国 (広州)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (成都)、中国東部 2 金融、中国 (香港)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、タイ (バンコク)、日本 (東京)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、英国 (ロンドン) のリージョンにあるバケットにレプリケートできます。

アカウント A に属するソースバケットからアカウント B に属するデスティネーションバケットに SSE-KMS を使用して暗号化されたオブジェクトをコピーする場合、アカウント B を使用して次の手順を実行します。

  1. KMS コンソールにログインします。左側のナビゲーションウィンドウで、[リソース] > [インスタンス] を選択します。インスタンス ページで、デスティネーションバケットと同じリージョンに KMS インスタンスを作成して有効にします。KMS インスタンスを作成するときは、[VPC の数] パラメーターの値が 2 以上であることを確認してください。その他のパラメーターについてはデフォルト設定を保持します。詳細については、「KMS インスタンスを購入して有効にする」をご参照ください。

  2. KMS インスタンスにキーを作成します。キタイプをデフォルトにすることはできません。ソフトウェアキーを使用することをお勧めします。詳細については、「キーを管理する」をご参照ください。

    説明

    キーを作成したら、後続のレプリケーションルール構成のために [基本情報] セクションにキーの ARN を記録します。

  3. キーのポリシーを構成します。キーポリシーを構成するときは、[アカウント間のユーザー]前の手順 で作成したロールの ARN に設定します。詳細については、「キーポリシーを構成する」をご参照ください。

    重要

    アカウント間で SSE-KMS で暗号化されたオブジェクトをレプリケートするには、キーポリシーに少なくとも kms:Decrypt および kms:GenerateDataKey の権限が必要です。KMS コンソールでキーポリシーを構成すると、上記の権限がデフォルトで追加されます。API 操作を呼び出してカスタムキーポリシーを構成する場合は、ポリシーに少なくとも kms:Decrypt および kms:GenerateDataKey の権限があることを確認してください。

方法

OSS コンソールの使用

アカウント A を使用して、ソースバケットの CRR ルールを作成します。

  1. OSS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。「ベケットリスト」ページで、ソースバケットの名前をクリックします。

  3. 左側のナビゲーションツリーで、データ管理 > クロスリージョンレプリケーション を選択します。

  4. クロスリージョンレプリケーション タブで、クロスリージョンレプリケーション をクリックします。

  5. クロスリージョンレプリケーション パネルで、パラメーターを構成します。次の表にパラメーターを示します。

    セクション

    パラメーター

    説明

    ターゲットバケットの設定

    [ソースバケット]

    ソースバケットのリージョンと名前が表示されます。このパラメーターを指定する必要はありません。

    ターゲットバケット

    [別の Alibaba Cloud アカウントに属するバケットを指定] を選択し、[リージョン] ドロップダウンリストからリージョンを選択して、デスティネーションバケットの名前を入力します。

    レプリケーションポリシーの設定

    複製するオブジェクト

    デスティネーションバケットにレプリケートするオブジェクトを選択します。

    • [ソースバケット内のすべてのオブジェクト]: OSS はソースバケットからデスティネーションバケットにすべてのオブジェクトをレプリケートします。

    • [指定されたプレフィックスを持つオブジェクト]: OSS は、名前に特定のプレフィックスが含まれるオブジェクトをソースバケットからデスティネーションバケットにレプリケートします。最大 10 個のプレフィックスを指定できます。デフォルトでは、最大 10 個のプレフィックスを指定できます。増加については、technical support にお問い合わせください。リクエストに応じて、プレフィックスの最大数を 30 に増やすことができます。

    レプリケーションポリシー

    ソースバケットからデスティネーションバケットにレプリケートする操作を選択します。有効な値:

    説明

    データレプリケーションルールを作成した後、ライフサイクルルールまたは CopyObject 操作によるソースバケット内のオブジェクトの x-oss-last-access-time 属性の変更とストレージクラスの変換は、デスティネーションバケットに同期されません。

    • [追加/変更] (ディザスタリカバリに適用可能): OSS は、オブジェクトの作成と更新操作のみをソースバケットからデスティネーションバケットにレプリケートします。

      重要

      このレプリケーションポリシーが適用されている場合、ポリシーが有効になった後にアップロードまたは更新されたオブジェクトのみがデスティネーションバケットにレプリケートされ、ソースバケットから削除されたオブジェクトはデスティネーションバケットから削除されません。このポリシーは、ソースバケットでの手動削除またはライフサイクルポリシーによってトリガーされる自動削除に起因するデスティネーションバケットでのデータ損失を効果的に防ぎます。

    • [追加/削除/変更] (複数のユーザーまたはアプリケーションが同じデータセットを共有およびアクセスする必要があるシナリオに適用可能): OSS は、オブジェクトの作成、更新、および削除操作をソースバケットからデスティネーションバケットにレプリケートします。

      重要

      新しくアップロードおよび更新されたオブジェクトのレプリケーションに加えて、このレプリケーションポリシーには削除のレプリケーションが含まれており、データの整合性が確保されます。このポリシーは、複数のユーザーまたはアプリケーションが同じデータセットを共有およびアクセスする必要があるシナリオに適用できます。ソースバケットから手動またはライフサイクルポリシーによって削除されたオブジェクトも、デスティネーションバケットから削除されます。オブジェクトは削除されると復元できません。

    マルチパートアップロードを実行してソースバケットにオブジェクトをアップロードする場合、アップロードされた各パートはデスティネーションバケットにレプリケートされます。CompleteMultipartUpload 操作を呼び出すことによって取得された完全なオブジェクトも、デスティネーションバケットにレプリケートされます。

    詳細については、「バージョニングでデータレプリケーションを使用する」をご参照ください。

    既存データの複製

    履歴データ(CRR を有効にする前にソースバケットに存在するデータ)を宛先バケットに複製するかどうかを指定します。

    • はい: 履歴データは宛先バケットに複製されます。

      重要

      履歴データが複製されると、ソースバケットから複製されたオブジェクトによって、宛先バケット内の同じ名前のオブジェクトが上書きされる場合があります。 データ損失を防ぐために、ソースバケットと宛先バケットのバージョン管理を有効にすることをお勧めします。

    • いいえ: OSS は、CRR ルールが有効になった後にアップロードまたは更新されたオブジェクトのみを宛先バケットに複製します。

    KMS に基づいて暗号化されたオブジェクトを複製する

    ソースバケットからデスティネーションバケットに KMS ベースで暗号化されたオブジェクトを複製するかどうかを指定します。有効な値:

    • [はい]: デスティネーションバケットまたはソースバケット内のオブジェクトに KMS ベースの暗号化が設定されている場合、オブジェクトはデスティネーションバケットに複製されます。「KMS ベースで暗号化されたオブジェクトを複製する」を「はい」に設定した場合、CMK ID パラメーターを指定する必要があります。

      説明

      HeadObject 操作を呼び出して、ソースバケット内のオブジェクトの暗号化ルールを照会し、GetBucketEncryption 操作を呼び出して、デスティネーションバケットの暗号化ルールを照会できます。

    • [いいえ]: KMS ベースで暗号化されたオブジェクトは、デスティネーションバケットに複製されません。

    CMK ID

    KMSキーのARNを指定します。 KMSキーのARNを取得する方法の詳細については、「KMS インスタンスでキーを作成する」をご参照ください。

    RAM ロール 名前

    ドロップダウンリストから、手順 1 で作成した RAM ロールを選択します。

    アクセラレーションタイプ

    トランスミッション加速 は、送信元と送信先のバケットがそれぞれ中国本土のリージョンと中国本土以外のリージョンにある場合にのみサポートされます。

    転送アクセラレーションを有効にすると、転送アクセラレーション料金が発生します。詳細については、「転送アクセラレーション料金」をご参照ください。

    RTC

    説明
    • RTC は、中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (深圳) の各リージョンでご利用いただけます。

    • RTC は、米国 (シリコンバレー) および米国 (バージニア) の各リージョンでご利用いただけます。

    Replication Time Control ( RTC ) が有効になると、OSS は OSS にアップロードしたほとんどのオブジェクトを数秒以内に複製し、99.99% のオブジェクトを 10 分以内に複製します。詳細については、「RTC」をご参照ください。 RTC を有効にすると課金されます。詳細については、「RTC トラフィック料金」をご参照ください。

  6. [OK] をクリックします。表示されるメッセージで、有効化 をクリックします。

    • CRR ルールを構成した後、ルールを変更または削除することはできません。

    • CRR ルールを構成すると、レプリケーション タスクは 3 ~ 5 分で開始されます。 ソース バケットの クロスリージョンレプリケーション タブでレプリケーションの進捗状況を確認できます。

    • CRR では、データは非同期的にレプリケートされます。 ソース バケットからデスティネーション バケットにデータをレプリケートするために必要な期間は、データ量によって異なります。 期間は数分から数時間までさまざまです。

OSS SDK の使用

アカウント間の CRR は、OSS SDK for Java、OSS SDK for Python、および OSS SDK for Go を使用する場合にのみサポートされています。

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AddBucketReplicationRequest;

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。
        String region = "cn-hangzhou";
        // アクセスクレデンシャルをプロジェクトコードに保存しないでください。そうしないと、アクセスクレデンシャルが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。この例では、アクセスクレデンシャルは環境変数から取得されます。サンプルコードを実行する前に、環境変数を構成する必要があります。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // ソースバケットの名前を指定します。例: src-bucket。
        String bucketName = "src-bucket";
        // デスティネーションバケットの名前を指定します。デスティネーションバケットとソースバケットは、異なる Alibaba Cloud アカウントに属している必要があります。
        String targetBucketName = "dest-bucket";
        // デスティネーションバケットが配置されているリージョンを指定します。デスティネーションバケットとソースバケットは、異なるリージョンに配置されている必要があります。
        String targetBucketLocation = "oss-cn-shanghai";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);
            request.setTargetBucketName(targetBucketName);
            request.setTargetBucketLocation(targetBucketLocation);
            // 履歴データを複製するかどうかを指定します。デフォルトでは、履歴データは複製されます。この例では、このパラメーターは false に設定されており、履歴データは複製されないことを示しています。
            request.setEnableHistoricalObjectReplication(false);
            // OSS がデータの複製に使用する RAM ロールの名前を指定します。ロールには、ソースバケットで CRR を実行し、デスティネーションバケットで複製されたオブジェクトを受信するための権限が必要です。
            request.setSyncRole("yourRole");           
            //List prefixes = new ArrayList();
            //prefixes.add("image/");
            //prefixes.add("video");
            //prefixes.add("a");
            //prefixes.add("A");
            // 複製するオブジェクトの名前に含まれるプレフィックスを指定します。プレフィックスを指定すると、名前にプレフィックスが含まれるオブジェクトのみがデスティネーションバケットに複製されます。
            //request.setObjectPrefixList(prefixes);
            //List actions = new ArrayList();
            //actions.add(AddBucketReplicationRequest.ReplicationAction.PUT);
            // OSS がオブジェクトの作成および更新操作をソースバケットからデスティネーションバケットに複製するように指定します。
            //request.setReplicationActionList(actions);
            ossClient.addBucketReplication(request);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}        

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# 環境変数からアクセスクレデンシャルを取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# ソースバケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
# ソースバケットの名前を指定します。例: src-bucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'src-bucket')
replica_config = ReplicationRule(
    # デスティネーションバケットの名前を指定します。デスティネーションバケットとソースバケットは、異なる Alibaba Cloud アカウントに属している必要があります。
    target_bucket_name='dest-bucket',
    # デスティネーションバケットが配置されているリージョンを指定します。デスティネーションバケットとソースバケットは、異なるリージョンに配置されている必要があります。
    target_bucket_location='oss-cn-shanghai',
    # OSS がデータの複製に使用する RAM ロールの名前を指定します。ロールには、ソースバケットで CRR を実行し、デスティネーションバケットで複製されたオブジェクトを受信するための権限が必要です。
    sync_role_name='roleNameTest',
)

# 複製するオブジェクトの名前に含まれるプレフィックスを指定します。プレフィックスを指定すると、名前にいずれかのプレフィックスが含まれるオブジェクトのみがデスティネーションバケットに複製されます。
# prefix_list = ['prefix1', 'prefix2']
# データ複製ルールを構成します。
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # OSS がオブジェクトの作成および更新操作をソースバケットからデスティネーションバケットに複製するように指定します。
     # action_list=[ReplicationRule.P],
     # デスティネーションバケットの名前を指定します。デスティネーションバケットとソースバケットは、異なる Alibaba Cloud アカウントに属している必要があります。
     # target_bucket_name='dest-bucket',
     # デスティネーションバケットが配置されているリージョンを指定します。デスティネーションバケットとソースバケットは、異なるリージョンに配置されている必要があります。
     # target_bucket_location='yourTargetBucketLocation',
     # デフォルトでは、履歴データは複製されます。この例では、このパラメーターは False に設定されており、履歴データは複製されないことを示しています。
     # is_enable_historical_object_replication=False,
     # データ複製中にデータの転送に使用するリンクを指定します。
     # target_transfer_type='oss_acc',    
  #)

# データ複製を有効にします。
bucket.put_bucket_replication(replica_config)

Go

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("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルトの構成を読み込み、クレデンシャルプロバイダーとリージョンを指定します。
	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("failed to put bucket replication %v", err)
	}

	// 結果を表示します。
	log.Printf("put bucket replication result:%#v\n", result)
}

ossutil を使用する

ossutil を使用してアカウント間で CRR を実行する方法の詳細については、「put-bucket-replication」をご参照ください。

OSS API を使用する

ビジネスで高度なカスタマイズが必要な場合は、RESTful API 操作を直接呼び出すことができます。 API 操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketReplication」をご参照ください。

参照資料