数据同步
更新时间:2026-06-08
put_bucket_replication
创建数据同步。每个id唯一确定一条replication规则,对一个id首次put会认为是创建一条replication规则,对同一个id的再次put认为是覆盖,如果原先status是enable,则不允许覆盖成disable;如果原先是enable,再次put成enable,replication会重新开始执行;不允许两个replication规则除了id不一致以外其他项均一致。
说明:
- 用户必须是源Bucket的owner且拥有FULL_CONTROL权限,且有目标Bucket的写权限。
- 目标Bucket和源Bucket必须存在。
- 目标Bucket和源Bucket可以是同region下的Bucket,也可以是不同Region下的Bucket。
- 目标Bucket和源Bucket可以是同账户下的bucket,也可以是不同账户下的bucket,但是源账户需要有目的bucket的写权限
- 整个配置的大小不能超过128k,当前bucket下所有规则长度不得超过200KB
- 数据同步暂时不支持归档类型文件的同步,进行数据同步时会忽略归档类型文件。
- 用户最多配置10条replication规则
- 单个规则,最多20个resource
- 单个规则,最多20个notIncludeResource
- id 由数字字母 - _ 组成,不得超过20个字符
- 目前源bucket开启版本控制后,不支持数据同步功能。
请求参数
| 参数 | 是否必须 | 描述 |
|---|---|---|
| id | 是 | replication规则名,id 由数字字母 - _ 组成,不得超过20个字符 |
| status | 是 | 是否生效 |
| resource | 是 | replication生效前缀,resource的配置形式为{$bucket_name/<生效的对象前缀>},必须要以$bucket_name+/开头 |
| notIncludeResource | 否 | replication不生效范围,notIncludeResource的配置形式为{$bucket_name/<不生效的对象范围>},必须要以$bucket_name+/开头, 只接受以下三种形式,${bucketname}/<不生效的对象前缀>+*,${bucketname}/*+<不生效的对象后缀>,${bucketname}/*+不生效的对象中缀+*,参见请求示例 |
| destination | 是 | 复制的目的端配置 |
| +bucket | 是 | 目的Bucket name。同步到不同区域的bucket,指定bucket名称即可自动获取区域信息 |
| +storageClass | 否 | 目的Object的存储类型。如果保持和源Bucket的存储类型一致,则该参数不需要配置;如果需要单独指定存储类型可以为STANDARD,STANDARD_IA,COLD;如果是多AZ类型bucket,可取值为MAZ_STANDARD_IA和MAZ_STANDARD。 |
| +prefix | 否 | 目的存储路径 |
| replicateHistory | 否 | 历史文件复制,有该项则认为是开启。开启历史文件复制后,存量的全部Object都同步复制到目的Bucket,复制范围共用resource。 |
| +storageClass | 否 | 目的Object的存储类型。如果保持和源Bucket的存储类型一致,则该参数不需要配置;如果需要单独指定存储类型可以为STANDARD,STANDARD_IA,COLD;如果是多AZ类型bucket,可取值为MAZ_STANDARD_IA和MAZ_STANDARD。 |
| replicateDeletes | 是 | 是否开启删除同步,可以为enabled,disabled。 |
示例代码
C++
1void put_bucket_replication(Client &client) {
2 // Note: replication requires different source and destination buckets
3 // Using a different bucket name as destination
4 std::string g_bucket = "test";
5 std::string dst_bucket = g_bucket + "-dst";
6
7 // minimal replication rule with required fields
8 ReplicationRule rule;
9 rule.id = "test-replication";
10 rule.status = "enabled";
11 rule.resource.push_back(g_bucket + "/");
12 rule.destination.bucket = dst_bucket; // must be different from source bucket
13 rule.replicate_deletes = "enabled"; // required field
14
15 PutBucketReplicationRequest request(g_bucket, rule);
16 PutBucketReplicationResponse response;
17 client.put_bucket_replication(request, &response);
18}
GetBucketReplication
获取bucket指定id的数据同步信息,包括源Bucket名称、目的Bucket名称、存储类型、是否进行历史复制,数据同步策略,目的region等。
C++
1void get_bucket_replication(Client &client) {
2 std::string g_bucket = "test";
3 GetBucketReplicationRequest request(g_bucket, "test-replication");
4 GetBucketReplicationResponse response;
5 client.get_bucket_replication(request, &response);
6 if (response.is_ok()) {
7 const ReplicationRule &rule = response.replication_rule();
8 std::cout << "id: " << rule.id << std::endl;
9 std::cout << "status: " << rule.status << std::endl;
10 std::cout << "dest bucket: " << rule.destination.bucket << std::endl;
11 std::cout << "dest region: " << rule.dest_region << std::endl;
12 } else if (response.status_code() == 404) {
13 std::cout << "No replication configured for this bucket" << std::endl;
14 }
15}
DeleteBucketReplication
删除对应id的数据同步复制配置。
C++
1void delete_bucket_replication(Client &client) {
2 std::string g_bucket = "test";
3 DeleteBucketReplicationRequest request(g_bucket, "test-replication");
4 DeleteBucketReplicationResponse response;
5 client.delete_bucket_replication(request, &response);
6}
GetBucketReplicationProgress
获取指定id的数据同步复制的进程状态。
C++
1void get_bucket_replication_progress(Client &client) {
2 std::string g_bucket = "test";
3 GetBucketReplicationProgressRequest request(g_bucket, "test-replication");
4 GetBucketReplicationProgressResponse response;
5 client.get_bucket_replication_progress(request, &response);
6 if (response.is_ok()) {
7 const ReplicationProgressInfo &progress = response.replication_progress();
8 std::cout << "status: " << progress.status << std::endl;
9 std::cout << "historyReplicationPercent: " << progress.history_replication_percent << std::endl;
10 std::cout << "latestReplicationTime: " << progress.latest_replication_time << std::endl;
11 }
12}
ListBucketReplication
获取bucket所有的replication同步规则,响应元素与GetBucketReplication类似。
C++
1void list_bucket_replication(Client &client) {
2 std::string g_bucket = "test";
3 ListBucketReplicationRequest request(g_bucket);
4 ListBucketReplicationResponse response;
5 client.list_bucket_replication(request, &response);
6 if (response.is_ok()) {
7 const std::vector<ReplicationRule> &rules = response.replication_rules();
8 std::cout << "rule count: " << rules.size() << std::endl;
9 for (size_t i = 0; i < rules.size(); ++i) {
10 std::cout << " rule[" << i << "]: " << rules[i].id
11 << ", status: " << rules[i].status
12 << ", dest: " << rules[i].destination.bucket << std::endl;
13 }
14 }
15}
评价此篇文章
