データレプリケーションは、オブジェクトとオブジェクト操作 (作成、上書き、削除など) をソースバケットから宛先バケットに自動的にレプリケートします。 Object Storage Service (OSS) は、クロスリージョンレプリケーション (CRR) と同一リージョンレプリケーション (SRR) をサポートしています。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
データレプリケーションを有効にするには、
oss:PutBucketReplication
権限が必要です。 データレプリケーション規則を照会するには、oss:GetBucketReplication
権限が必要です。 データをレプリケートできるリージョンを照会するには、oss:GetBucketReplicationLocation
権限が必要です。 データレプリケーションタスクの進行状況を照会するには、oss:GetBucketReplicationProgress
権限が必要です。 データレプリケーションを無効にするには、oss:DeleteBucketReplication
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
データレプリケーションの有効化
データレプリケーションを有効にする前に、ソースバケットとターゲットバケットがバージョン管理されていないか、バージョン管理が有効になっていることを確認してください。
次のサンプルコードは、データレプリケーションを有効にして、中国 (杭州) リージョンのsrcexamplebucketから中国 (北京) リージョンのdestexamplebucketにデータをレプリケートする方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
replica_config = ReplicationRule(
# Specify the destination bucket to which you want to replicate data.
target_bucket_name='destexamplebucket',
# Specify the region in which the destination bucket is located.
# If you want to enable CRR, the source and destination buckets must be located in different regions. If you want to enable SRR, the source and destination buckets must be located in the same region.
target_bucket_location='yourTargetBucketLocation'
)
# Specify the prefixes that are contained in the names of the objects that you want to replicate. After you specify a prefix, only objects whose names contain the prefix are replicated to the destination bucket.
# prefix_list = ['prefix1', 'prefix2']
# Configure the data replication rule.
# replica_config = ReplicationRule(
# prefix_list=prefix_list,
# Specify that OSS replicates object creation and update operations from the source bucket to the destination bucket.
# action_list=[ReplicationRule.PUT],
# Specify the destination bucket to which you want to replicate data.
# target_bucket_name='destexamplebucket1',
# Specify the region in which the destination bucket is located.
# target_bucket_location='yourTargetBucketLocation',
# Specify whether to replicate historical data. By default, historical data is replicated. In this example, historical data is not replicated.
# is_enable_historical_object_replication=False,
# Specify the link that is used to transfer data during data replication.
# target_transfer_type='oss_acc',
# Specify the role that you want to authorize OSS to use to replicate data. If you want to use SSE-KMS to encrypt the objects that are replicated to the destination bucket, you must specify this parameter.
# sync_role_name='roleNameTest',
# Replicate the objects that are encrypted by using SSE-KMS.
# sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
# Specify the CMK ID used in SSE-KMS encryption. If you want to use SSE-KMS to encrypt the objects that are replicated to the destination bucket, you must configure this parameter.
# replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac****',
#)
# Enable data replication.
bucket.put_bucket_replication(replica_config)
データ複製ルールの照会
次のサンプルコードは、examplebucketという名前のバケットのデータレプリケーションルールを照会する方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Query the data replication rules.
result = bucket.get_bucket_replication()
# Display the returned information.
for rule in result.rule_list:
print(rule.rule_id)
print(rule.target_bucket_name)
print(rule.target_bucket_location)
データをレプリケートできるリージョンの照会
次のサンプルコードは、examplebucketバケットからデータをレプリケートできるリージョンをクエリする方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
Query the regions to which data can be replicated.
result = bucket.get_bucket_replication_location()
for location in result.location_list:
print(location)
データ複製タスクの進行状況の照会
履歴データ複製タスクと増分データ複製タスクの進行状況を照会できます。
履歴データ複製タスクの進行状況は、パーセンテージで表されます。 履歴データレプリケーションが有効になっているバケットに対してのみ、履歴データレプリケーションタスクの進行状況を照会できます。
増分データレプリケーションタスクの進行状況は、時点として表されます。 時点より前にソースバケットに格納されているデータがレプリケートされます。
次のサンプルコードは、レプリケーションルールIDがtest_replication_1であるデータレプリケーションタスクの進行状況を照会する方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Query the progress of the data replication task.
# Specify the ID of the data replication rule. Example: test_replication_1.
result = bucket.get_bucket_replication_progress('test_replication_1')
print(result.progress.rule_id)
# Check whether historical data replication is enabled.
print(result.progress.is_enable_historical_object_replication)
# Display the progress of historical data replication.
print(result.progress.historical_object_progress)
# Display the progress of incremental data replication.
print(result.progress.new_object_progress)
データレプリケーションの無効化
指定したソースバケットに設定されているレプリケーションルールを削除して、バケットのデータレプリケーションを無効にすることができます。
次のサンプルコードは、examplebucketバケットのtest_replication_1ルールを削除する方法の例を示しています。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Disable data replication. After data replication is disabled, the objects that are replicated to the destination bucket still exist. However, all changes to the objects in the source bucket are no longer replicated to the destination bucket.
# Specify the ID of the data replication rule. Example: test_replication_1.
result = bucket.delete_bucket_replication('test_replication_1')
関連ドキュメント
データレプリケーションの完全なサンプルコードについては、『GitHub』をご参照ください。
データレプリケーションを有効にするために呼び出すAPI操作の詳細については、「PutBucketReplication」をご参照ください。
データレプリケーション規則を照会するために呼び出すAPI操作の詳細については、「GetBucketReplication」をご参照ください。
データをレプリケートできるリージョンをクエリするために呼び出すAPI操作の詳細については、「GetBucketReplicationLocation」をご参照ください。
データレプリケーションタスクの進行状況を照会するために呼び出すことができるAPI操作の詳細については、「GetBucketReplicationProgress」をご参照ください。
データレプリケーションを無効にするために呼び出すことができるAPI操作の詳細については、「DeleteBucketReplication」をご参照ください。