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

Object Storage Service:同じアカウント内のCRR

最終更新日:Apr 08, 2024

同じアカウント内のクロスリージョンレプリケーション (CRR) を使用すると、同じAlibaba Cloudアカウント内のリージョン内のバケットから別のリージョン内の別のバケットへのObject Storage Service (OSS) オブジェクトの自動および非同期 (ほぼリアルタイム) レプリケーションが可能になります。 同じアカウント内のCRRは、オブジェクトの作成、上書き、削除などの操作をソースバケットから宛先バケットにレプリケートします。 このトピックでは、同じアカウント内でCRRを実行する方法について説明します。

前提条件

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

  • CRRタスクの宛先バケットとして機能するバケットBは、同じAlibaba Cloudアカウント内の別のリージョンに作成されます。 バケットBの名前とバケットBが配置されているリージョンが記録されます。

ロールタイプ

同じアカウント内でCRRを実行する場合、ソースバケットとターゲットバケット間でオブジェクトをレプリケートするために使用されるロールを指定する必要があります。 次のRAMロールのいずれかを選択して、同じアカウント内でCRRを実行できます。

重要

RAMユーザーを使用してRAMロールを作成できます。 RAMユーザーには、ram:CreateRoleram:GetRoleram:ListPoliciesForRole、およびram:AttachPolicyToRoleの権限が必要です。 ただし、RAMユーザーにram:CreateRoleram:GetRoleなどの権限を付与することは危険です。 RAMユーザーが関連付けられているAlibaba Cloudアカウントを使用して、RAMロールを作成し、RAMロールに必要な権限を付与できます。 これにより、RAMユーザーはAlibaba Cloudアカウントによって作成されたRAMロールを引き受けることができます。

新しいRAMロール (推奨)

同じアカウント内でCRRを実行するルールを作成する場合、RAMロールを作成できます。 [RAMロール名] ドロップダウンリストから [新しいRAMロール] を選択すると、oss-replication-{uuid} 形式のRAMロールが自動的に作成され、KMSに基づいて暗号化されたオブジェクトの複製を [はい] に設定するかどうかに基づいて、ロールに異なるポリシーがアタッチされます。

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

    RAMロールを作成したら、画面の指示に従って必要なポリシーをロールにアタッチします。 次に、ソースバケットからターゲットバケットにデータをレプリケートするポリシーと、Key Management Service (KMS) を管理するAliyunKMSFullAccessポリシーにRAMロールがアタッチされます。

  • KMSに基づいて暗号化されたレプリケートオブジェクトをNoに設定する

    RAMロールを作成したら、画面の指示に従って必要なポリシーをロールにアタッチします。 次に、RAMロールがポリシーにアタッチされ、ソースバケットから宛先バケットにデータがレプリケートされます。

AliyunOSSRole

同じアカウント内でCRRを実行するルールを作成する場合、AliyunOSSRoleロールを選択してデータ複製タスクを完了できます。 AliyunOSSRoleを選択すると、KMSに基づいて暗号化されたオブジェクトの複製をはいに設定するかどうかに基づいて、異なるポリシーがAliyunOSSRoleロールにアタッチされます。

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

    AliyunOSSRoleを選択すると、AliyunOSSRoleロールに次のポリシーが自動的にアタッチされます。AliyunOSSFullAccess (OSSを管理するためのアクセス許可) およびAliyunKMSFullAccess (KMSを管理するためのアクセス許可) 。

    警告

    AliyunOSSRoleロールには、現在のAlibaba CloudアカウントおよびKMS内のすべてのバケットですべての操作を実行する権限があります。 このロールを使用するときは注意してください。

  • KMSに基づいて暗号化されたレプリケートオブジェクトをNoに設定する

    AliyunOSSRoleを選択すると、AliyunOSSFullAccessポリシーが自動的にAliyunOSSRoleロールにアタッチされます。

    警告

    AliyunOSSRoleロールには、現在のAlibaba Cloudアカウント内のすべてのバケットですべての操作を実行する権限があります。 このロールを使用するときは注意してください。

カスタム役割

同じアカウント内でCRRを実行するルールを作成する場合、カスタムロールを使用してデータ複製タスクを完了できます。 RAMコンソールでカスタムロールを作成し、必要なポリシーをカスタムロールにアタッチする必要があります。

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

    通常のサービスロールを作成するときは、[信頼できるエンティティの選択] を [Alibaba Cloudサービス] に、ロールタイプを [通常のサービスロール] に、[信頼できるサービスの選択] を [OSS] に設定します。 詳細については、「通常のサービスロールの作成」をご参照ください。

  2. RAMロールに権限を付与します。

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

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

    警告

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

    KMSで暗号化されたオブジェクトを宛先バケットにレプリケートする場合は、AliyunKMSFullAccessシステムポリシーをRAMロールにアタッチする必要があります。

    詳細については、「RAMロールへの権限の付与」をご参照ください。

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

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

    説明

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

    {
       "バージョン":"1" 、
       "ステートメント":[
          {
             "効果":"許可" 、
             "Action":[
                "oss:ReplicateList" 、
              	"oss:ReplicateGet"
             ],
             "Resource":[
              	"acs:oss:*:*:src-bucket" 、
                "acs:oss:*:*:src-bucket/*"
             ]
          },
          {
             "効果":"許可" 、
             "Action":[
              	"oss:ReplicateList" 、
                "oss:ReplicateGet" 、
                "oss:ReplicatePut" 、
                "oss:ReplicateDelete"
             ],
             "Resource":[
              	"acs:oss:*:*:dest-bucket" 、
                "acs:oss:*:*:dest-bucket/*"
             ]
          }
       ]
    }

    詳細については、「RAMロールへの権限の付与」をご参照ください。

    説明

    KMSで暗号化されたオブジェクトを宛先バケットにレプリケートする場合は、AliyunKMSFullAccessシステムポリシーをRAMロールにアタッチする必要があります。

手順

OSSコンソールの使用

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

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

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

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

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

    セクション

    パラメーター

    説明

    複製先バケットの設定

    ソースバケット

    ソースバケットのリージョンと名前が表示されます。

    複製先バケット

    [Alibaba Cloudアカウントに属するバケットの選択] を選択し、[リージョン] ドロップダウンリストからリージョンを選択し、[バケット] ドロップダウンリストから宛先バケットを選択します。

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

    複製するオブジェクト

    宛先バケットにレプリケートするオブジェクトを選択します。 有効な値:

    • すべてのファイルの同期: OSSは、すべてのオブジェクトをソースバケットから宛先バケットにレプリケートします。

    • 指定されたプレフィックスを持つオブジェクト: OSSは、名前に特定のプレフィックスを含むオブジェクトをソースバケットから宛先バケットに複製します。 プレフィックスは最大10個まで指定できます。

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

    データ複製モードを設定します。 有効な値:

    • 追加 /変更: OSSは、オブジェクトの作成および更新操作のみをソースバケットから宛先バケットにレプリケートします。

    • 追加 /削除 /変更: OSSは、オブジェクトの作成、更新、および削除操作をソースバケットから宛先バケットにレプリケートします。

    マルチパートアップロードを実行してオブジェクトをソースバケットにアップロードする場合、アップロードされた各パーツはターゲットバケットにレプリケートされます。 CompleteMultipartUpload操作を呼び出して取得した完全なオブジェクトも、ターゲットバケットにレプリケートされます。

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

    過去データの複製

    履歴データ (CRRを有効にする前にソースバケットに存在するデータ) をターゲットバケットにレプリケートするかどうかを指定します。

    • Yes: 履歴データが宛先バケットにレプリケートされます。

      重要

      履歴データがレプリケートされると、ソースバケットからレプリケートされたオブジェクトは、宛先バケット内の同じ名前を持つオブジェクトを上書きする可能性があります。 データの損失を防ぐために、ソースバケットとターゲットバケットのバージョン管理を有効にすることを推奨します。

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

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

    KMSに基づいて暗号化されたオブジェクトを宛先バケットに複製するかどうかを指定します。

    • はい: KMSベースの暗号化がソースまたは宛先バケットのオブジェクトに設定されている場合、オブジェクトは宛先バケットにレプリケートされます。

      説明

      HeadObject操作を呼び出して、ソースバケット内のオブジェクトの暗号化ルールを照会し、GetBucketEncryption操作を呼び出して、ターゲットバケットの暗号化ルールを照会します。

    • いいえ: KMSに基づいて暗号化されたオブジェクトは、宛先バケットにレプリケートされません。

    CMK ID

    宛先オブジェクトの暗号化に使用する顧客マスターキー (CMK) を指定します。

    CMKを使用してオブジェクトを暗号化する場合は、KMSコンソールの宛先バケットと同じリージョンにCMKを作成する必要があります。 詳細については、「CMKの作成」をご参照ください。

    RAM ロール

    オブジェクトの複製に使用するRAMロールを指定します。 新しい RAM ロール を選択します。 これは推奨されるオプションです。 ドロップダウンリストから [新しいRAMロール] を選択した後、画面の指示に従って新しいRAMロールに権限を付与します。

    AliyunOSSRoleまたはカスタムRAMロールを選択することもできます。 3種類のRAMロールの詳細については、「ロールタイプ」をご参照ください。

    レプリケーション速度の設定

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

    加速タイプを指定します。 トランスミッション加速のみがサポートされています。 中国本土と中国本土以外のリージョン間でデータをレプリケートする場合、転送アクセラレーションを使用してデータ転送を高速化できます。 転送アクセラレーションを有効にすると、転送アクセラレーション料金が課金されます。 詳細については、「転送アクセラレーション料金」をご参照ください。

    RTC

    説明

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

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

    レプリケーション時間制御 (RTC) を有効にすると、OSSはOSSにアップロードしたほとんどのオブジェクトを数秒以内にレプリケートし、99.99% のオブジェクトを10分以内にレプリケートします。 RTCを有効にすると課金されます。 詳細については、「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

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.AddBucketReplicationRequestをインポートします。public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // プロジェクトコードにアクセス資格情報を保存しないことをお勧めします。 そうしないと、アクセス資格情報が漏洩する可能性があります。 その結果、アカウント内のすべてのリソースのセキュリティが侵害されます。 この例では、アクセス資格情報は環境変数から取得されます。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // ソースバケットの名前を指定します。 
        String bucketName = "src-bucket";
        // 宛先バケットの名前を指定します。 送信元バケットと送信先バケットは、同じAlibaba Cloudアカウントに属している必要があります。 
        String targetBucketName = "dest-bucket";
        // 宛先バケットが配置されているリージョンを指定します。 ソースバケットと宛先バケットは、異なるリージョンに配置する必要があります。 
        文字列targetBucketLocation = "oss-cn-hangzhou";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);
            request.setTargetBucketName(targetBucketName);
            request.setTargetBucketLocation(targetBucketLocation);
            // 履歴データを複製するかどうかを指定します。 デフォルトでは、履歴データはレプリケートされます。 この例では、このパラメーターはfalseに設定され、履歴データがレプリケートされないことを示します。 
            request.setEnableHistoricalObjectReplication(false);
            // OSSがデータの複製に使用するRAMロールの名前を指定します。 ロールには、ソースバケットでCRRを実行し、宛先バケットでレプリケートされたオブジェクトを受け取る権限が必要です。 
            request.setSyncRole("yourRole");
            // SSE-KMSを使用して暗号化されたオブジェクトを複製するかどうかを指定します。 
            // request.setSseKmsEncryptedObjectsStatus("Enabled");
            // SSE-KMSで使用するCMK IDを指定します。 StatusがEnabledに設定されている場合、このパラメーターを指定する必要があります。 
            // request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca ***");
            // リストプレフィックス=新しいArrayList();
            // prefixes.add("image/");
            // prefixes.add("ビデオ");
            // prefixes.add("a");
            // プレフィックス。add("A");
            // 複製するオブジェクトの名前に含まれるプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスの1つが含まれているオブジェクトのみが宛先バケットにレプリケートされます。 
            // request.setObjectPrefixList (プレフィックス);
            // リストアクション=新しいArrayList();
            // actions.add(AddBucketReplicationRequest.ReplicationAction.ALL);
            // 宛先バケットにレプリケートする操作を指定します。 デフォルト値は ALL です。 これは、ソースバケット内のオブジェクトに対して実行されたすべての操作が宛先バケットにレプリケートされることを示します。 
            // request.setReplicationActionList (アクション);
            ossClient.addBucketReplication(request);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}        

Python

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsから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-hangzhou '、
    # OSSでデータの複製に使用するRAMロールの名前を指定します。 ロールには、ソースバケットでCRRを実行し、宛先バケットでレプリケートされたオブジェクトを受け取る権限が必要です。 
    sync_role_name='roleNameTest' 、)

# レプリケートするオブジェクトの名前に含まれるプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスの1つが含まれているオブジェクトのみが宛先バケットにレプリケートされます。 
# prefix_list = ['prefix1', 'prefix2']
# データ複製ルールを指定します。 
# replica_config = ReplicationRule (
     # prefix_list=prefix_list,
     # 宛先バケットにレプリケートする操作を指定します。 デフォルト値は ALL です。 これは、ソースバケット内のオブジェクトに対して実行されたすべての操作が宛先バケットにレプリケートされることを示します。 
     # action_list=[ReplicationRule.ALL] 、
     # 宛先バケットの名前を指定します。 送信元バケットと送信先バケットは、同じ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) 

行く

パッケージメイン

import (import (import)
"encoding/xml"
"fmt"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
"os"
)

func HandleError (エラーエラー) {
fmt.Println("Error:", err)
os.Exit(-1)
}

// データ複製を有効にします。 
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// ソースバケットの名前を指定します。 
	srcbucketName := "yourSrcBucket"
// 宛先バケットの名前を指定します。 
	destBucketName := "yourDestBucket"
// レプリケートするオブジェクトの名前に含まれるprefix_1とprefix_2のプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスの1つが含まれているオブジェクトのみが宛先バケットにレプリケートされます。 
	// すべてのオブジェクトをソースバケットから宛先バケットにレプリケートするには、プレフィックスを指定しないでください。 
	prefix1 := "prefix_1"
prefix2 := "prefix_2"
// SSE-KMSで使用するCMK IDを指定します。 StatusがEnabledに設定されている場合、このパラメーターを指定する必要があります。 
	keyId := "c4d49f85-ee30-426b-a5ed-95e9139d"
// SSE-KMSを使用して暗号化されたオブジェクトを複製するかどうかを指定します。 
	source := "有効"
prefixSet := oss.ReplicationRulePrefix{Prefix: []* string{&prefix1, &prefix2}}
// RTC機能を有効にします。 
	enabled := "enabled"
reqReplication := oss.PutBucketReplication {
ルール: []oss.ReplicationRule {
{
PrefixSet: &prefixSet、// 宛先バケットにレプリケートする操作を指定します。 デフォルト値は ALL です。 これは、ソースバケット内のオブジェクトに対して実行されたすべての操作が宛先バケットにレプリケートされることを示します。 
				アクション: "ALL" 、RTC: &有効、宛先: &oss.ReplicationRuleDestination {
バケット: destBucketName、// 宛先バケットが配置されているリージョンを指定します。 ソースバケットと宛先バケットは、異なるリージョンに配置する必要があります。 
					ロケーション: "oss-cn-hangzhou" 、// データレプリケーション中にデータの転送に使用するリンクを指定します。 この例では、このパラメーターはoss_accに設定されています。これは、転送アクセラレーションに使用されるリンクが使用されることを示します。 
					TransferType: "oss_acc" 、},
// 履歴データを複製するかどうかを指定します。 デフォルトでは、履歴データはレプリケートされます。 この例では、このパラメーターはdisabledに設定されています。これは、履歴データがレプリケートされないことを示します。 
				HistoricalObjectReplication: "disabled" 、// OSSがデータの複製に使用するRAMロールの名前を指定します。 ロールには、ソースバケットでCRRを実行し、宛先バケットでレプリケートされたオブジェクトを受け取る権限が必要です。 
				SyncRole: "yourRole" 、EncryptionConfiguration: &keyId、SourceSelectionCriteria: &source、},
},
}

xmlBody, err := xml.Marshal(reqReplication)
if err! =nil {
HandleError(err)
}
err = client.PutBucketReplication(srcbucketName, string(xmlBody))

if err! =nil {
HandleError(err)
}

fmt.Println("Put Bucket Replication Success!)
} 

ossutilの使用

ossutilを使用して同じアカウント内でCRRを実行する方法の詳細については、「レプリケーション」をご参照ください。

OSS APIの使用

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

参考資料