TOS 支持跨区域复制,您可以将一个地域的对象复制到不同地域的存储桶中。开启跨区域复制规则后,当您在源存储桶中上传新文件时,TOS 会自动将文件同步至目的桶内。该功能用于满足异地容灾和数据复制的需求。
StorageClassIDSourceObject
时与源对象一致, 该配置项值为 StorageClassIDDestinationBucket
时与目标桶一致。以下代码用于设置桶的跨区域复制规则。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError, StatusType, StorageClassInheritDirectiveType } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const rule = { // 规则 ID ID: 'rule_id', // 指定是否开启跨区域复制规则 Status: StatusType.Enabled, // 指定跨区域复制匹配对象的前缀,空则代表复制全部对象。 PrefixSet: [], // 指定复制到的目标信息 Destination: { // 目标桶名 Bucket: 'dst_bucket', // 目标 Region 信息 Location: 'dst_region', // 指定复制对象的存储类型规则 // StorageClassInheritDirectiveSourceObject: 与源对象保持一致 // StorageClassInheritDirectiveDestinationBucket: 与目标桶保持一致 StorageClassInheritDirective: StorageClassInheritDirectiveType.StorageClassInheritDirectiveSourceObject, }, // 是否需要复制历史对象 HistoricalObjectReplication: StatusType.Disabled, }; // 设置 Role const role = 'your role'; const { requestId: putReplicationRequestId } = await client.putBucketReplication({ bucket: bucketName, role, rules: [rule], }); console.log('putBucketReplication Request ID: ', putReplicationRequestId); } catch (error) { handleError(error); } } main();
注意
要获取桶的跨区域复制规则,默认您必须为桶所有者。
以下代码用于获取桶的跨区域复制规则。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const { data, requestId: getReplicationRequestId } = await client.getBucketReplication({ bucket: bucketName, // 不指定 ruleId 查询当前桶所有跨区域复制规则 // 指定 ruleId 时,返回指定规则 // ruleId: 'ruleId', }); console.log('getBucketReplication Request ID: ', getReplicationRequestId); console.log('Replication rules length: ', data.Rules.length); // 查看跨域访问规则详细信息 for (const rule of data.Rules) { // 规则 ID console.log('rule id:', rule.ID); // 规则状态 console.log('rule status:', rule.Status); for (const prefix of rule.PrefixSet || []) { // 规则前缀 console.log('rule prefix:', prefix); } // 目标桶 console.log('rule dst bucket:', rule.Destination.Bucket); // 目标地域 console.log('rule dst location:', rule.Destination.Location); // 存储类型 console.log('rule dst storage class:', rule.Destination.StorageClass); // 存储类型规则 console.log('rule dst storage class inherit directive:', rule.Destination.StorageClassInheritDirective); } } catch (error) { handleError(error); } } main();
注意
以下代码用于获取桶的跨区域复制进度。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const { data, requestId: getReplicationRequestId } = await client.getBucketReplication({ bucket: bucketName, // 不指定 ruleId 查询当前桶所有跨区域复制规则 // 指定 ruleId 时,返回指定规则 // ruleId: 'ruleId', }); console.log('getBucketReplication Request ID: ', getReplicationRequestId); console.log('Replication rules length: ', data.Rules.length); // 查看跨域访问规则详细信息 for (const rule of data.Rules) { // 规则 ID console.log('rule id:', rule.ID); // 历史复制进度 console.log('rule historical object:', rule.Progress.HistoricalObject); // 增量进度时间点 console.log('rule new object:', rule.Progress.NewObject); } } catch (error) { handleError(error); } } main();
注意
要删除桶的跨区域复制规则,默认您必须为桶所有者。
以下代码用于删除桶的跨区域复制规则。
// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入 import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk'; // 创建客户端 const client = new TosClient({ accessKeyId: process.env['TOS_ACCESS_KEY'], accessKeySecret: process.env['TOS_SECRET_KEY'], region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。 endpoint: "Provide your endpoint", // 填写域名地址 }); function handleError(error) { if (error instanceof TosClientError) { console.log('Client Err Msg:', error.message); console.log('Client Err Stack:', error.stack); } else if (error instanceof TosServerError) { console.log('Request ID:', error.requestId); console.log('Response Status Code:', error.statusCode); console.log('Response Header:', error.headers); console.log('Response Err Code:', error.code); console.log('Response Err Msg:', error.message); } else { console.log('unexpected exception, message: ', error); } } const bucketName = 'node-sdk-test-bucket'; async function main() { try { const { requestId: deleteReplicationRequestId } = await client.deleteBucketReplication({ bucket: bucketName, }); console.log('deleteBucketReplication Request ID: ', deleteReplicationRequestId); } catch (error) { handleError(error); } } main();
关于设置跨区域复制规则的更多介绍,请参见跨区域复制规则。