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

说明 关于跨区域复制的更多信息,请参见开发指南中的管理跨区域复制

开启跨区域复制

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

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

# 依次填写复制规则ID、目标Bucket名称、目标Bucket所在地域和是否同步历史数据。
# 如果未设置rule_id或者设置rule_id为空,则OSS会为该复制规则生成唯一值。
# 目标Bucket所在地域以华北2(北京)为例,target_bucket_location填写为oss-cn-beijing。
# OSS默认会同步历史数据。如果设置is_enable_historical_object_replication为False,表示禁止同步历史数据。
replica_config = ReplicationRule(rule_id='test_replication_1',
                                 target_bucket_name='dstexamplebucket',
                                 target_bucket_location='oss-cn-beijing',
                                 is_enable_historical_object_replication=False
                                 )
# 开启跨区域复制。
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')