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

开启跨区域复制

以下代码用于开启跨区域复制:

// 指定源Bucket对应的Endpoint。以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。关于Bucket名称命名规范的更多信息,请参见Bucket。
String bucketName = "yourBucketName";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);

// 指定数据要复制到的目标Bucket。
request.setTargetBucketName("yourTargetBucketName");
// 指定目标Bucket对应的Endpoint。
request.setTargetBucketLocation("https://oss-cn-beijing.aliyuncs.com");
// 默认同步历史数据。此处设置为false,表示禁止同步历史数据。
request.setEnableHistoricalObjectReplication(false);
// 指定授权OSS进行数据复制的角色名称。如果指定使用SSE-KMS加密目标对象,则必须指定该元素。
//request.setSyncRole("yourRole");
// 指定OSS是否复制通过SSE-KMS加密创建的对象。
//request.setSseKmsEncryptedObjectsStatus("Enabled");
// 指定SSE-KMS密钥ID。如果指定Status为Enabled,则必须指定该元素。
//request.setReplicaKmsKeyID("3542abdd-5821-4fb5-a425-90adca***");
//List prefixes = new ArrayList();
//prefixes.add("image/");
//prefixes.add("video");
//prefixes.add("a");
//prefixes.add("A");
// 指定待复制Object的前缀Prefix。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
//request.setObjectPrefixList(prefixes);
//List actions = new ArrayList();
//actions.add(AddBucketReplicationRequest.ReplicationAction.ALL);
// 指定可以被复制到目标Bucket的操作。默认值为ALL,表示源Bucket的所有操作都会复制到目标Bucket。
//request.setReplicationActionList(actions);
ossClient.addBucketReplication(request);

// 关闭OSSClient。
ossClient.shutdown();            

查看跨区域复制

以下代码用于查看存储空间已开启的跨区域复制:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "yourBucketName";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 查看跨区域复制配置。
List<ReplicationRule> rules = ossClient.getBucketReplication(bucketName);
for (ReplicationRule rule : rules) {
    System.out.println(rule.getReplicationRuleID());
    System.out.println(rule.getTargetBucketLocation());
    System.out.println(rule.getTargetBucketName());
}

// 关闭OSSClient。
ossClient.shutdown();            

查看可同步的目标地域

以下代码用于获取存储空间所能同步到的地域列表:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "yourBucketName";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 查看可同步的目标地域。
List<String> locations = ossClient.getBucketReplicationLocation(bucketName);
for (String loc : locations) {
    System.out.println(loc);
}

// 关闭OSSClient。
ossClient.shutdown();            

查看跨区域复制进度

跨区域复制进度分为历史数据同步进度和实时数据同步进度。

  • 历史数据同步进度用百分比表示,仅对开启了历史数据同步的存储空间有效。
  • 实时数据同步进度用新写入数据的时间点表示,代表这个时间点之前的数据已同步完成。

以下代码用于查看跨区域复制进度:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "yourBucketName";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

BucketReplicationProgress process = ossClient.getBucketReplicationProgress(bucketName, "yourRuleId");
System.out.println(process.getReplicationRuleID());
System.out.println(process.isEnableHistoricalObjectReplication());
// 查看历史数据同步进度。
System.out.println(process.getHistoricalObjectProgress());
// 查看实时数据同步进度。
System.out.println(process.getNewObjectProgress());

// 关闭OSSClient。
ossClient.shutdown();            

关闭跨区域复制

以下代码用于关闭已开启的跨区域复制:

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "yourBucketName";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 关闭跨区域复制。关闭后,已同步到目标Bucket内的文件依然存在,只是不再将源Bucket内文件的所有改动同步到目标Bucket。
ossClient.deleteBucketReplication(bucketName, "yourRuleId");

// 关闭OSSClient。
ossClient.shutdown();            

相关文档