TOS 支持跨区域复制文件,您可以将一个地域的文件复制到不同地域的存储桶中。开启跨区域复制规则后,当您在源存储桶中上传新文件时,TOS 会自动将文件同步至目的桶内。该功能用于满足异地容灾和数据复制的需求。
以下代码用于设置桶 examplebucket 的跨区域复制规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 指定数据要复制到的目标 Bucket std::string destBucketName = "yourdestbucket"; // Your DestBucket Region 填写 Bucket 所在的 Region std::string destRegion = "Your DestBucket Region"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); PutBucketReplicationInput input(bucketName); ReplicationRule rule; // 设置该跨区域复制的 id rule.setId("1"); // 设置开启该规则 rule.setStatus(StatusType::StatusEnabled); // 设置该跨区域复制规则仅复制指定前缀的对象 rule.setPrefixSet({"prefix1","prefix2"}); // 指定数据要复制到的目标,设置跨区域复制目的桶和目的桶所在区域 Destination destination(destBucketName,destRegion); // 设置 StorageClass 和 StorageClassInheritDirective destination.setStorageClass(StorageClassType::IA); destination.setStorageClassInheritDirective(StorageClassInheritDirectiveType::DestinationBucket); rule.setDestination(destination); // 设置是否开启历史对象的同步 // rule.setHistoricalObjectReplication(StatusType::StatusEnabled); input.setRules({rule}); input.setRole("ServiceRoleforReplicationAccessTOS"); auto output = client.putBucketReplication(input); if (!output.isSuccess()) { // 异常处理 std::cout << "PutBucketReplication failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "PutBucketReplication success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
注意
要获取桶的跨区域复制规则,默认您必须为桶所有者。
以下代码用于获取桶 examplebucket 的跨区域复制规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 填写获取的 ruleId std::string ruleId = "yourCrrRuleId"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); GetBucketReplicationInput input(bucketName); // 如果需要基于特定的 ruleId 进行 crr 规则查询 // input.setRuleId(ruleId); auto output = client.getBucketReplication(input); if (!output.isSuccess()) { // 异常处理 std::cout << "GetBucketReplication failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "GetBucketReplication success." << std::endl; std::cout << "Role:" << output.result().getRole() << std::endl; std::cout << "Get Bucket Crr Rule List:" << std::endl; for (const auto& rule : output.result().getRules()) { std::cout << "id:" << rule.getId() << std::endl; std::cout << "status:" << rule.getStringFormatStatus() << std::endl; std::cout << "historical object replication:" << rule.getStringFormatHistoricalObjectReplication() << std::endl; if (rule.getProgress() != nullptr) { // 新写入数据复制进度用新写入数据的时间点表示,代表这个时间点之前的数据已复制完成。 std::cout << "new object speed of progress:" << rule.getProgress()->getHistoricalObject() << std::endl; // 历史数据复制用百分比进度表示 std::cout << "historical object speed of progress:" << rule.getProgress()->getHistoricalObject() << std::endl; } for (auto const& prefix : rule.getPrefixSet()) { std::cout << "prefix is:" << prefix << std::endl; } auto destination = rule.getDestination(); std::cout << "dest bucket is:" << destination.getBucket() << std::endl; std::cout << "storage class is:" << destination.getStringFormatStorageClass() << std::endl; std::cout << "storage class inherit directive is:" << destination.getStringFormatStorageClassInheritDirective() << std::endl; std::cout << "dest location is:" << destination.getLocation() << std::endl; } // 释放网络等资源 CloseClient(); return 0; }
注意
要删除桶的跨区域复制规则,默认您必须为桶所有者。
以下代码用于删除桶 examplebucket 的跨区域复制规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); DeleteBucketReplicationInput input(bucketName); auto output = client.deleteBucketReplication(input); if (!output.isSuccess()) { // 异常处理 std::cout << "DeleteBucketReplication failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "DeleteBucketReplication success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
关于设置跨区域复制规则的更多介绍,请参见跨区域复制规则。