データレプリケーションは、オブジェクトをソースバケットからターゲットバケットに非同期にコピーします。また、オブジェクトの作成、更新、削除などの操作をほぼリアルタイムでレプリケーションします。Object Storage Service (OSS) は、クロスリージョンレプリケーション (CRR) と同一リージョンレプリケーション (SRR) をサポートしています。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得します。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して 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
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# バケット名 (examplebucket など) を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
replica_config = ReplicationRule(
# データのレプリケーション先となるターゲットバケットを指定します。
target_bucket_name='destexamplebucket',
# ターゲットバケットが配置されているリージョンを指定します。
# クロスリージョンレプリケーションを有効にする場合、ソースバケットとターゲットバケットは異なるリージョンに配置する必要があります。同一リージョンレプリケーションを有効にする場合、ソースバケットとターゲットバケットは同じリージョンに配置する必要があります。
target_bucket_location='yourTargetBucketLocation'
)
# レプリケーションするオブジェクトのプレフィックスを指定します。プレフィックスを指定すると、プレフィックスに一致するオブジェクトのみがターゲットバケットにレプリケーションされます。
# prefix_list = ['prefix1', 'prefix2']
# データレプリケーションルールを設定します。
# replica_config = ReplicationRule(
# prefix_list=prefix_list,
# ソースバケットでのオブジェクトの作成および更新操作をターゲットバケットにレプリケーションします。
# action_list=[ReplicationRule.PUT],
# データのレプリケーション先となるターゲットバケットを指定します。
# target_bucket_name='destexamplebucket1',
# ターゲットバケットが配置されているリージョンを指定します。
# target_bucket_location='yourTargetBucketLocation',
# デフォルトでは、既存データがレプリケーションされます。この例では、このパラメーターを False に設定して、既存データのレプリケーションを無効にします。
# is_enable_historical_object_replication=False,
# データレプリケーション用のデータ転送リンクを指定します。
# target_transfer_type='oss_acc',
# データレプリケーションのために OSS に認可されたロールを指定します。この要素は、SSE-KMS を使用してターゲットオブジェクトを暗号化する場合に必要です。
# sync_role_name='roleNameTest',
# SSE-KMS 暗号化で作成されたオブジェクトをレプリケーションします。
# sse_kms_encrypted_objects_status=ReplicationRule.ENABLED
# SSE-KMS キー ID を指定します。この要素は、SSE-KMS 暗号化で作成されたオブジェクトをレプリケーションする場合に必要です。
# replica_kms_keyid='9468da86-3509-4f8d-a61e-6eab1eac****',
#)
# データレプリケーションを有効にします。
bucket.put_bucket_replication(replica_config)データレプリケーションルールの表示
次のコードは、examplebucket のデータレプリケーションルールを表示する方法を示しています。
# -*- 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.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# バケット名 (examplebucket など) を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# データレプリケーションルールを表示します。
result = bucket.get_bucket_replication()
# 返された情報を出力します。
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
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# バケット名 (examplebucket など) を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# レプリケーション可能なターゲットリージョンを表示します。
result = bucket.get_bucket_replication_location()
for location in result.location_list:
print(location)データレプリケーションの進捗状況の表示
データレプリケーションの進捗状況は、既存データのレプリケーションの進捗状況と増分データのレプリケーションの進捗状況に分かれています。
既存データのレプリケーションの進捗状況はパーセンテージで表されます。これは、既存データのレプリケーションが有効になっているバケットにのみ適用されます。
増分データのレプリケーションの進捗状況は、特定の時点によって示されます。これは、この時点より前に書き込まれたデータがレプリケーションされたことを意味します。
次のコードは、examplebucket の ID `test_replication_1` を持つルールのデータレプリケーションの進捗状況を表示する方法を示しています。
# -*- 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.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# バケット名 (examplebucket など) を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# データレプリケーションの進捗状況を表示します。
# レプリケーションルール ID (test_replication_1 など) を指定します。
result = bucket.get_bucket_replication_progress('test_replication_1')
print(result.progress.rule_id)
# 既存データのレプリケーションが有効になっているかどうかを確認します。
print(result.progress.is_enable_historical_object_replication)
# 既存データのレプリケーションの進捗状況。
print(result.progress.historical_object_progress)
# リアルタイムデータのレプリケーションの進捗状況。
print(result.progress.new_object_progress) データレプリケーションの無効化
バケットのレプリケーションルールを削除することで、ソースバケットとターゲットバケット間のデータレプリケーション関係を無効にできます。
次のコードは、examplebucket から ID `test_replication_1` を持つレプリケーションルールを削除する方法を示しています。
# -*- 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.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョン情報 (cn-hangzhou など) を指定します。このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# バケット名 (examplebucket など) を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# データレプリケーションを無効にします。データレプリケーションが無効になった後も、ターゲットバケットにレプリケーションされたオブジェクトは残ります。ただし、ソースバケット内のオブジェクトに対するその後の変更は、ターゲットバケットにレプリケーションされなくなります。
# レプリケーションルール ID (test_replication_1 など) を指定します。
result = bucket.delete_bucket_replication('test_replication_1')関連ドキュメント
データレプリケーションの完全なサンプルコードについては、「GitHub」をご参照ください。
データレプリケーションを有効にする API 操作の詳細については、「PutBucketReplication」をご参照ください。
データレプリケーションルールを表示する API 操作の詳細については、「GetBucketReplication」をご参照ください。
レプリケーション可能なターゲットリージョンを表示する API 操作の詳細については、「GetBucketReplicationLocation」をご参照ください。
データレプリケーションの進捗状況を表示する API 操作の詳細については、「GetBucketReplicationProgress」をご参照ください。
データレプリケーションを無効にする API 操作の詳細については、「DeleteBucketReplication」をご参照ください。