跨區域複製是在不同OSS地域之間自動、非同步複製檔案,將源儲存空間中檔案的改動(新建、覆蓋、刪除操作)同步到目標儲存空間中。該功能用於滿足異地容災和資料複製的需求。
更多跨區域複製的內容請參見開發指南中的管理跨區域複製。
開啟跨區域複製
以下代碼用於開啟跨區域複製:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);
request.setReplicationRuleID("<yourRuleId>");
request.setTargetBucketName("<yourTargetBucketName>");
// 目標Endpoint以北京為例。
request.setTargetBucketLocation("oss-cn-beijing");
// 設定禁止同步曆史資料。預設會同步曆史資料。
request.setEnableHistoricalObjectReplication(false);
ossClient.addBucketReplication(request);
// 關閉OSSClient。
ossClient.shutdown();
查看跨區域複製
以下代碼用於查看儲存空間已開啟的跨區域複製:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(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 = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(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 = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
List<String> locations = ossClient.getBucketReplicationLocation(bucketName);
for (String loc : locations) {
System.out.println(loc);
}
// 關閉OSSClient。
ossClient.shutdown();
關閉跨區域複製
以下代碼用於關閉已開啟的跨區域複製:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 關閉跨區域複製。關閉後目標儲存空間內的檔案依然存在,只是不再同步源儲存空間內檔案的所有改動。
ossClient.deleteBucketReplication(bucketName, "<yourRuleId>");
// 關閉OSSClient。
ossClient.shutdown();