tencent cloud

Cross-Bucket replication
Last updated:2025-10-14 10:50:32
Cross-Bucket replication
Last updated: 2025-10-14 10:50:32

Feature Overview

This document provides an overview of APIs and SDK code samples related to bucket copying.
API
Operation
Description
Setting Cross-Bucket Replication
Sets a cross-bucket replication rule for a bucket
Querying a bucket replication rule
Queries the cross-bucket replication rule of a bucket
Deleting a bucket replication rule
Deletes a cross-bucket replication rule of a bucket

Setting Cross-Bucket Replication

Note

This API is used to set a cross-bucket replication rule for a bucket.

Method prototype

cos_status_t *cos_put_bucket_replication(const cos_request_options_t *options,
const cos_string_t *bucket,
cos_replication_params_t *replication_param,
cos_table_t **resp_headers);

Description

Parameter name
ParameterDescription
Local Disk Types
options
COS request options
Struct
bucket
The bucket name must follow the naming format: BucketName-APPID.
String
replication_param
Bucket Replication Request Parameters
Struct
role
Operator's account information
String
rule_list
Bucket Replication Rule Configuration Information
Struct
id
Name of a specific rule
String
status
Rule status identifier. Enumerated values: Enabled, Disabled
String
prefix
Prefix match. Prefixes cannot overlap; otherwise, an error is returned
String
dst_bucket
Target bucket, resource identifier format: qcs::cos:[region]::[bucketname-AppId]
String
storage_class
Storage class, enumerated values: Standard, Standard_IA. For more storage types, see Storage Class Overview. Default value: Original storage class.
String
resp_headers
Returns the HTTP response headers
Struct

Response description

Response Parameter
Description
Local Disk Types
code
Error Codes
Int
error_code
Error code
String
error_msg
Error code description
String
req_id
Request message ID
String

Sample

#include "cos_http_io.h"
#include "cos_api.h"
#include "cos_log.h"
#include <unistd.h>

// endpoint is the COS access domain name. For more information, see https://www.tencentcloud.com/document/product/436/6224.
static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
// A developer-owned secret ID/key used for the project. It can be obtained at https://console.tencentcloud.com/cam/capi.
static char *TEST_ACCESS_KEY_ID; //your secret_id
static char *TEST_ACCESS_KEY_SECRET; //your secret_key
// The only user-level resource identifier for COS access. It can be obtained at https://console.tencentcloud.com/cam/capi.
static char TEST_APPID[] = "<APPID>"; //your appid
// COS bucket name, in the format of [bucket]-[appid], for example mybucket-1253666666. It can be obtained at https://console.tencentcloud.com/cos5/bucket.
static char TEST_BUCKET_NAME[] = "<bucketname-appid>";

void log_status(cos_status_t *s)
{
cos_warn_log("status->code: %d", s->code);
if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
}

void init_test_config(cos_config_t *config, int is_cname)
{
cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&config->appid, TEST_APPID);
config->is_cname = is_cname;
}

void init_test_request_options(cos_request_options_t *options, int is_cname)
{
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
options->ctl = cos_http_controller_create(options->pool, 0);
}

void test_put_replication()
{
cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_request_options_t *dst_options = NULL;
cos_string_t bucket;
cos_string_t dst_bucket;
cos_table_t *resp_headers = NULL;

cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
init_test_request_options(options, is_cname);
cos_str_set(&bucket, TEST_BUCKET_NAME);
cos_str_set(&dst_bucket, "replicationtest");

dst_options = cos_request_options_create(p);
init_test_request_options(dst_options, is_cname);
cos_str_set(&dst_options->config->endpoint, "cn-east.myqcloud.com");

cos_replication_params_t *replication_param = NULL;
replication_param = cos_create_replication_params(p);
cos_str_set(&replication_param->role, "qcs::cam::uin/100000616666:uin/100000616666");

cos_replication_rule_content_t *rule = NULL;
rule = cos_create_replication_rule_content(p);
cos_str_set(&rule->id, "Rule_01");
cos_str_set(&rule->status, "Enabled");
cos_str_set(&rule->prefix, "test1");
cos_str_set(&rule->dst_bucket, "qcs:id/0:cos:cn-east:appid/1253686666:replicationtest");
cos_list_add_tail(&rule->node, &replication_param->rule_list);

rule = cos_create_replication_rule_content(p);
cos_str_set(&rule->id, "Rule_02");
cos_str_set(&rule->status, "Disabled");
cos_str_set(&rule->prefix, "test2");
cos_str_set(&rule->storage_class, "Standard_IA");
cos_str_set(&rule->dst_bucket, "qcs:id/0:cos:cn-east:appid/1253686666:replicationtest");
cos_list_add_tail(&rule->node, &replication_param->rule_list);

rule = cos_create_replication_rule_content(p);
cos_str_set(&rule->id, "Rule_03");
cos_str_set(&rule->status, "Enabled");
cos_str_set(&rule->prefix, "test3");
cos_str_set(&rule->storage_class, "Standard_IA");
cos_str_set(&rule->dst_bucket, "qcs:id/0:cos:cn-east:appid/1253686666:replicationtest");
cos_list_add_tail(&rule->node, &replication_param->rule_list);

//put bucket replication
s = cos_put_bucket_replication(options, &bucket, replication_param, &resp_headers);
log_status(s);

cos_pool_destroy(p);
}

int main(int argc, char *argv[])
{
// Get SECRETID and SECRETKEY from environment variables
TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");

if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}

//set log level, default COS_LOG_WARN
cos_log_set_level(COS_LOG_WARN);

//set log output, default stderr
cos_log_set_output(NULL);

test_put_replication();

cos_http_io_deinitialize();

return 0;
}

Querying a bucket replication rule

Note

This API is used to query the cross-bucket replication rule of a bucket.

Method prototype

cos_status_t *cos_get_bucket_replication(const cos_request_options_t *options,
const cos_string_t *bucket,
cos_replication_params_t *replication_param,
cos_table_t **resp_headers);

Description

Parameter name
ParameterDescription
Local Disk Types
options
COS request options.
Struct
bucket
The bucket name must follow the naming format: BucketName-APPID.
String
replication_param
Bucket Replication Request Parameters.
Struct
role
Operator's account information.
String
rule_list
Bucket Replication Rule Configuration Information.
Struct
id
Name of a specific rule.
String
status
Rule status identifier. Enumerated values: Enabled, Disabled.
String
prefix
Prefix match. Prefixes cannot overlap; otherwise, an error is returned.
String
dst_bucket
Target bucket, resource identifier format: qcs::cos:[region]::[bucketname-AppId].
String
storage_class
Storage class, enumerated values: Standard, Standard_IA. For more storage types, see Storage Class Overview. Default value: Original storage class.
String
resp_headers
Returns the HTTP response headers.
Struct

Response description

Response Parameter
Description
Local Disk Types
code
Error Codes
Int
error_code
Error code
String
error_msg
Error code description
String
req_id
Request message ID
String

Sample

#include "cos_http_io.h"
#include "cos_api.h"
#include "cos_log.h"
#include <unistd.h>

// endpoint is the COS access domain name. For more information, see https://www.tencentcloud.com/document/product/436/6224.
static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
// A developer-owned secret ID/key used for the project. It can be obtained at https://console.tencentcloud.com/cam/capi.
static char *TEST_ACCESS_KEY_ID; //your secret_id
static char *TEST_ACCESS_KEY_SECRET; //your secret_key
// The only user-level resource identifier for COS access. It can be obtained at https://console.tencentcloud.com/cam/capi.
static char TEST_APPID[] = "<APPID>"; //your appid
// COS bucket name, in the format of [bucket]-[appid], for example mybucket-1253666666. It can be obtained at https://console.tencentcloud.com/cos5/bucket.
static char TEST_BUCKET_NAME[] = "<bucketname-appid>";

void log_status(cos_status_t *s)
{
cos_warn_log("status->code: %d", s->code);
if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
}

void init_test_config(cos_config_t *config, int is_cname)
{
cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&config->appid, TEST_APPID);
config->is_cname = is_cname;
}

void init_test_request_options(cos_request_options_t *options, int is_cname)
{
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
options->ctl = cos_http_controller_create(options->pool, 0);
}

void test_get_replication()
{
cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

// Initialize request options
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
init_test_request_options(options, is_cname);
cos_str_set(&bucket, TEST_BUCKET_NAME);

// Querying Bucket Replication Rules
cos_replication_params_t *replication_param2 = NULL;
replication_param2 = cos_create_replication_params(p);
s = cos_get_bucket_replication(options, &bucket, replication_param2, &resp_headers);

if (cos_status_is_ok(s)) {
printf("get bucket replication succeeded\\n");
printf("ReplicationConfiguration role: %s\\n", replication_param2->role.data);
cos_replication_rule_content_t *content = NULL;
cos_list_for_each_entry(cos_replication_rule_content_t, content, &replication_param2->rule_list, node) {
printf("ReplicationConfiguration rule, id:%s, status:%s, prefix:%s, dst_bucket:%s, storage_class:%s\\n",
content->id.data, content->status.data, content->prefix.data, content->dst_bucket.data, content->storage_class.data);
}
} else {
printf("get bucket replication failed\\n");
}

cos_pool_destroy(p);
}

int main(int argc, char *argv[])
{
// Get SECRETID and SECRETKEY from environment variables
TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");

if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}

//set log level, default COS_LOG_WARN
cos_log_set_level(COS_LOG_WARN);

//set log output, default stderr
cos_log_set_output(NULL);

test_get_replication();

cos_http_io_deinitialize();

return 0;
}

Deleting a bucket replication rule

Note

This API is used to delete the cross-bucket replication rule set for a bucket.

Method prototype

cos_status_t *cos_delete_bucket_replication(const cos_request_options_t *options,
const cos_string_t *bucket,
cos_table_t **resp_headers);

Description

Parameter name
ParameterDescription
Local Disk Types
options
COS request options.
Struct
bucket
The bucket name must follow the naming format: BucketName-APPID.
String
resp_headers
Returns the HTTP response headers.
Struct

Response description

Response Parameter
Description
Local Disk Types
code
Error Codes
Int
error_code
Error code
String
error_msg
Error code description
String
req_id
Request message ID
String

Sample

#include "cos_http_io.h"
#include "cos_api.h"
#include "cos_log.h"
#include <unistd.h>

// endpoint is the COS access domain name. For more information, see https://www.tencentcloud.com/document/product/436/6224.
static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
// A developer-owned secret ID/key used for the project. It can be obtained at https://console.tencentcloud.com/cam/capi.
static char *TEST_ACCESS_KEY_ID; //your secret_id
static char *TEST_ACCESS_KEY_SECRET; //your secret_key
// The only user-level resource identifier for COS access. It can be obtained at https://console.tencentcloud.com/cam/capi.
static char TEST_APPID[] = "<APPID>"; //your appid
// COS bucket name, in the format of [bucket]-[appid], for example mybucket-1253666666. It can be obtained at https://console.tencentcloud.com/cos5/bucket.
static char TEST_BUCKET_NAME[] = "<bucketname-appid>";

void log_status(cos_status_t *s)
{
cos_warn_log("status->code: %d", s->code);
if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
}

void init_test_config(cos_config_t *config, int is_cname)
{
cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
cos_str_set(&config->appid, TEST_APPID);
config->is_cname = is_cname;
}

void init_test_request_options(cos_request_options_t *options, int is_cname)
{
options->config = cos_config_create(options->pool);
init_test_config(options->config, is_cname);
options->ctl = cos_http_controller_create(options->pool, 0);
}

void test_delete_replication()
{
cos_pool_t *p = NULL;
int is_cname = 0;
cos_status_t *s = NULL;
cos_request_options_t *options = NULL;
cos_string_t bucket;
cos_table_t *resp_headers = NULL;

// Initialize request options
cos_pool_create(&p, NULL);
options = cos_request_options_create(p);
init_test_request_options(options, is_cname);
cos_str_set(&bucket, TEST_BUCKET_NAME);

// Delete bucket replication rule
s = cos_delete_bucket_replication(options, &bucket, &resp_headers);
if (cos_status_is_ok(s)) {
printf("delete bucket replication succeeded\\n");
} else {
printf("delete bucket replication failed\\n");
}

cos_pool_destroy(p);
}

int main(int argc, char *argv[])
{
// Get SECRETID and SECRETKEY from environment variables
TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");

if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
exit(1);
}

//set log level, default COS_LOG_WARN
cos_log_set_level(COS_LOG_WARN);

//set log output, default stderr
cos_log_set_output(NULL);

test_delete_replication();

cos_http_io_deinitialize();

return 0;
}

Was this page helpful?
You can also Contact Sales or Submit a Ticket for help.
Yes
No

Feedback