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

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

最終更新日:Mar 26, 2024

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

前提条件

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

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

ロールタイプ

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

重要

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

新しいRAMロール (推奨)

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

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

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

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

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

AliyunOSSRole

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

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

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

    警告

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

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

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

    警告

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

カスタム役割

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

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

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

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

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

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

    警告

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

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

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

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

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

    説明

    ビジネス要件に基づいて、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. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、[src-bucket] をクリックします。

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

  4. 同一リージョン内のレプリケーションタブで、同一リージョン内のレプリケーションをクリックします。

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

    セクション

    パラメーター

    説明

    複製先バケットの設定

    ソースバケット

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

    複製先バケット

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

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

    複製するオブジェクト

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

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

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

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

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

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

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

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

    バージョン管理が有効なバケット内のオブジェクトのSRRを構成する方法の詳細については、「バージョン管理でのデータレプリケーションの使用」をご参照ください。

    過去データの複製

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

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

      重要

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

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

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

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

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

      説明

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

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

    CMK ID

    レプリケートするオブジェクトを暗号化する顧客マスターキー (CMK) を指定します。

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

    RAMロール名

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

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

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

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

    • SRRルールを設定した後、レプリケーションタスクは3〜5分で開始されます。 ソースバケットの同一リージョン内のレプリケーションタブの [履歴データの複製] 列で、レプリケーションの進行状況を確認できます。

    • SRRでは、データは非同期的に複製される。 ソースバケットから宛先バケットにデータをレプリケートするのに必要な期間は、データの量によって異なります。 期間は、数分から数時間の範囲であり得る。

OSS SDKの使用

同じアカウント内のSRRは、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ロールの名前を指定します。 RAMロールには、ソースバケットでSRRを実行し、宛先バケットでレプリケートされたオブジェクトを受け取る権限が必要です。 
            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");
            // 複製するオブジェクトの名前に含まれるプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスが含まれているオブジェクトのみが宛先バケットにレプリケートされます。 
            // 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ロールの名前を指定します。 RAMロールには、ソースバケットでSRRを実行し、宛先バケットでレプリケートされたオブジェクトを受け取る権限が必要です。 
    sync_role_name='roleNameTest' 、)

# レプリケートするオブジェクトの名前に含まれるプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスが含まれているオブジェクトのみが宛先バケットにレプリケートされます。 
# prefix_list = ['prefix1', 'prefix2']
# データ複製ルールを指定します。 
# replica_config = ReplicationRule (
     # prefix_list=prefix_list,
     # 宛先バケットにレプリケートする操作を指定します。 デフォルト値は ALL です。 これは、ソースバケット内のオブジェクトに対して実行されたすべての操作が宛先バケットにレプリケートされることを示します。 
     # action_list=[ReplicationRule.ALL] 、
     # 宛先バケットの名前を指定します。 
     # target_bucket_name='dest-bucket' 、
     # 宛先バケットが配置されているリージョンを指定します。 
     # target_bucket_location='yourTargetBucketLocation' 、
     # 履歴データを複製するかどうかを指定します。 デフォルトでは、履歴データはレプリケートされます。 この例では、このパラメーターはFalseに設定されています。これは、履歴データがレプリケートされないことを示します。 
     # is_enable_historical_object_replication=False、    
     # SSE-KMSを使用して暗号化されたオブジェクトを複製します。 
     # sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
     # SSE-KMSで使用するCMK IDを指定します。 SSE-KMSを使用して、宛先バケットにレプリケートされるオブジェクトを暗号化する場合は、このパラメーターを指定する必要があります。 
     # replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac **** '、
  #)

# データ複製を有効にします。 
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のプレフィックスを指定します。 プレフィックスを指定すると、名前にプレフィックスが含まれているオブジェクトのみが宛先バケットにレプリケートされます。 
	// すべてのオブジェクトをソースバケットから宛先バケットにレプリケートするには、プレフィックスを指定しないでください。 
	prefix1 := "prefix_1"
prefix2 := "prefix_2"
// SSE-KMSで使用するCMK IDを指定します。 StatusがEnabledに設定されている場合、このパラメーターを指定する必要があります。 
	keyId := "c4d49f85-ee30-426b-a5ed-95e9 ****"
// SSE-KMSを使用して暗号化されたオブジェクトを複製するかどうかを指定します。 
	source := "有効"
prefixSet := oss.ReplicationRulePrefix{Prefix: []* string{&prefix1, &prefix2}}
reqReplication := oss.PutBucketReplication {
ルール: []oss.ReplicationRule {
{
PrefixSet: &prefixSet、// 宛先バケットにレプリケートする操作を指定します。 デフォルト値は ALL です。 これは、ソースバケット内のオブジェクトに対して実行されたすべての操作が宛先バケットにレプリケートされることを示します。 
				アクション: "ALL" 、宛先: &oss.ReplicationRuleDestination {
バケット: destBucketName、// 宛先バケットが配置されているリージョンを指定します。 ソースバケットと宛先バケットは同じリージョンにある必要があります。 
					ロケーション: "oss-cn-hangzhou" 、},
// 履歴データを複製するかどうかを指定します。 デフォルトでは、履歴データはレプリケートされます。 この例では、このパラメーターはdisabledに設定されています。これは、履歴データがレプリケートされないことを示します。 
				HistoricalObjectReplication: "disabled" 、// OSSがデータの複製に使用するRAMロールの名前を指定します。 RAMロールには、ソースバケットでSRRを実行し、宛先バケットでレプリケートされたオブジェクトを受け取る権限が必要です。 
				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を使用してSRRを有効にする方法の詳細については、「レプリケーション」をご参照ください。

OSS APIの使用

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