跨区域复制是在不同OSS地域之间自动、异步复制文件,将源存储空间(Bucket)中文件的改动(新建、覆盖、删除操作)复制到目标存储空间中。该功能用于满足异地容灾和数据复制的需求。

开启跨区域复制

以下代码用于开启跨区域复制,将华东1(杭州)地域下源存储空间srcexamplebucket中的数据复制到华北2(北京)地域下的目标存储空间destexamplebucket。

重要 开启跨区域复制前,请确保源存储空间与目标存储空间同时处于非版本化或已启用版本控制状态。
# -*- coding: utf-8 -*-
import oss2
from oss2.models import ReplicationRule
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# 填写源Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。关于其他Region对应的Endpoint信息,请参见访问域名和数据中心。
# 填写源Bucket名称,例如srcexamplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'srcexamplebucket')
replica_config = ReplicationRule(
    # 指定数据要复制到的目标Bucket。
    target_bucket_name='destexamplebucket',
    # 指定目标Bucket所在的Region。
    target_bucket_location='oss-cn-beijing'
)

# 指定待复制Object的前缀Prefix。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
# prefix_list = ['prefix1', 'prefix2']
# 设置跨区域复制规则。
# replica_config = ReplicationRule(
     # prefix_list=prefix_list,
     # 指定可以被复制到目标Bucket的操作。默认值为ALL,表示源Bucket的所有操作都会复制到目标Bucket。
     # action_list=[ReplicationRule.ALL],
     # 指定数据要复制到的目标Bucket。
     # target_bucket_name='destexamplebucket1',
     # 指定目标Bucket所在的Region。
     # target_bucket_location='oss-cn-shanghai',
     # 默认复制历史数据。此处设置为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.models import ReplicationRule

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

# 查看跨区域复制信息。
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的test_replication_1复制规则的数据复制进度。

# -*- coding: utf-8 -*-
import oss2
from oss2.models import ReplicationRule

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

# 查看跨区域复制进度。
# 填写复制规则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的数据所能复制到的地域列表。

# -*- coding: utf-8 -*-
import oss2
from oss2.models import ReplicationRule

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

# 查看可复制的目标地域。
result = bucket.get_bucket_replication_location()
for location in result.location_list:
    print(location)

关闭跨区域复制关系

通过删除存储空间的复制规则,您可以关闭源存储空间到目标存储空间的跨区域复制关系。

以下代码用于删除存储空间examplebucket的test_replication_1复制规则。

# -*- coding: utf-8 -*-
import oss2
from oss2.models import ReplicationRule

# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

# 关闭跨区域复制。
# 填写复制规则ID,例如test_replication_1。
result = bucket.delete_bucket_replication('test_replication_1')

相关文档