You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
存储桶复制
GetBucketReplication(Rust SDK)
复制全文
下载 pdf
GetBucketReplication(Rust SDK)
get_bucket_replication 接口用于获取指定存储桶的跨区域或同区域复制规则及进度,本文介绍如何通过 Rust SDK 的 get_bucket_replication 接口查询复制配置与状态。​
注意事项​
  • 您需要根据实际情况,填写示例代码中的地域和访问域名,详细介绍,请参见 地域和访问域名。​
  • 为了防止密钥泄露,本文示例代码需要从环境变量中读取 Access Key ID 和 Secret Access Key。因此使用 SDK 前,您需要配置长期访问凭证,详细介绍,请参见 配置长期访问凭证。​
  • 分层桶不支持调用 get_bucket_replication 接口。​
权限说明​
火山引擎主账号默认拥有全部权限,但是 IAM 用户默认没有任何权限。如果您需要使用子账号执行 get_bucket_replication 操作,火山引擎主账号需通过 IAM策略和桶策略为该子账号授予以下权限:​
tos:GetBucketReplication​
代码示例​
指定规则 ID 获取存储桶复制配置​
​
use futures_core::future::BoxFuture;​
use std::env;​
use std::future::Future;​
use std::time::Duration;​
use tokio::runtime::Handle;​
use ve_tos_rust_sdk::common::init_tracing_log;​
use ve_tos_rust_sdk::asynchronous::bucket::BucketAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::bucket::GetBucketReplicationInput;​
use ve_tos_rust_sdk::error::TosError;​
​
#[derive(Debug, Default)]​
pub struct TokioRuntime {}​
​
#[async_trait::async_trait]​
impl AsyncRuntime for TokioRuntime {​
type JoinError = tokio::task::JoinError;​
async fn sleep(&self, duration: Duration) {​
tokio::time::sleep(duration).await;​
}​
​
fn spawn<'a, F>(&self, future: F) -> BoxFuture<'a, Result<F::Output, Self::JoinError>>​
where​
F: Future + Send + 'static,​
F::Output: Send + 'static,​
{​
Box::pin(Handle::current().spawn(future))​
}​
​
fn block_on<F: Future>(&self, future: F) -> F::Output {​
Handle::current().block_on(future)​
}​
}​
​
#[tokio::main]​
async fn main() {​
// 初始化日志​
let _guard = init_tracing_log("info", "temp/logs", "app.log");​
​
// 从环境变量获取AK/SK​
let ak = env::var("TOS_ACCESS_KEY").expect("TOS_ACCESS_KEY未设置");​
let sk = env::var("TOS_SECRET_KEY").expect("TOS_SECRET_KEY未设置");​
let endpoint = "https://tos-cn-beijing.volces.com";​
let region = "cn-beijing";​
​
// 构建异步TOS客户端​
let client = tos::builder::<TokioRuntime>()​
.connection_timeout(3000)​
.request_timeout(10000)​
.max_retry_count(3)​
.ak(ak)​
.sk(sk)​
.region(region)​
.endpoint(endpoint)​
.build().expect("客户端构建失败");​
​
// 存储桶名称和规则ID​
let bucket_name = "your-bucket-name";​
let rule_id = "rule-123";​
​
// 构建获取指定规则ID的存储桶复制配置输入​
let mut input = GetBucketReplicationInput::default();​
input.set_bucket(bucket_name);​
input.set_rule_id(rule_id);​
​
// 调用API​
let result = client.get_bucket_replication(&input).await;​
​
match result {​
Ok(output) => {​
println!("请求ID: {}", output.request_id());​
println!("复制角色: {}", output.role());​
​
// 查找指定ID的规则​
if let Some(rule) = output.rules().iter().find(|r| r.id() == rule_id) {​
println!("\n找到规则 ID={}:", rule_id);​
println!(" 状态: {:?}", rule.status());​
println!(" 前缀集合: {:?}", rule.prefix_set());​
println!(" 目标存储桶: {}", rule.destination().bucket());​
println!(" 历史对象复制状态: {:?}", rule.historical_object_replication());​
} else {​
println!("未找到规则 ID={}", rule_id);​
}​
},​
Err(err) => {​
match err {​
TosError::TosClientError { message, .. } => {​
eprintln!("客户端错误: {}", message);​
},​
TosError::TosServerError { request_id, ec, .. } => {​
eprintln!("服务端错误: 请求ID={}, 错误码={}", request_id, ec);​
},​
_ => {​
eprintln!("未知错误: {:?}", err);​
}​
}​
}​
}​
}​
​
​
获取存储桶复制配置​
​
use futures_core::future::BoxFuture;​
use std::env;​
use std::future::Future;​
use std::time::Duration;​
use tokio::runtime::Handle;​
use ve_tos_rust_sdk::common::init_tracing_log;​
use ve_tos_rust_sdk::asynchronous::bucket::BucketAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::bucket::GetBucketReplicationInput;​
use ve_tos_rust_sdk::error::TosError;​
​
#[derive(Debug, Default)]​
pub struct TokioRuntime {}​
​
#[async_trait::async_trait]​
impl AsyncRuntime for TokioRuntime {​
type JoinError = tokio::task::JoinError;​
async fn sleep(&self, duration: Duration) {​
tokio::time::sleep(duration).await;​
}​
​
fn spawn<'a, F>(&self, future: F) -> BoxFuture<'a, Result<F::Output, Self::JoinError>>​
where​
F: Future + Send + 'static,​
F::Output: Send + 'static,​
{​
Box::pin(Handle::current().spawn(future))​
}​
​
fn block_on<F: Future>(&self, future: F) -> F::Output {​
Handle::current().block_on(future)​
}​
}​
​
#[tokio::main]​
async fn main() {​
// 初始化日志​
let _guard = init_tracing_log("info", "temp/logs", "app.log");​
​
// 从环境变量获取AK/SK​
let ak = env::var("TOS_ACCESS_KEY").expect("TOS_ACCESS_KEY未设置");​
let sk = env::var("TOS_SECRET_KEY").expect("TOS_SECRET_KEY未设置");​
let endpoint = "https://tos-cn-beijing.volces.com";​
let region = "cn-beijing";​
​
// 构建异步TOS客户端​
let client = tos::builder::<TokioRuntime>()​
.connection_timeout(3000)​
.request_timeout(10000)​
.max_retry_count(3)​
.ak(ak)​
.sk(sk)​
.region(region)​
.endpoint(endpoint)​
.build().expect("客户端构建失败");​
​
// 存储桶名称​
let bucket_name = "your-bucket-name";​
​
// 构建获取存储桶复制配置的输入​
let mut input = GetBucketReplicationInput::default();​
input.set_bucket(bucket_name);​
​
// 调用获取存储桶复制配置API​
let result = client.get_bucket_replication(&input).await;​
​
match result {​
Ok(output) => {​
println!("请求ID: {}", output.request_id());​
println!("复制角色: {}", output.role());​
println!("复制规则数量: {}", output.rules().len());​
​
for (index, rule) in output.rules().iter().enumerate() {​
println!("\n规则 {}:", index + 1);​
println!(" ID: {}", rule.id());​
println!(" 状态: {:?}", rule.status());​
println!(" 前缀集合: {:?}", rule.prefix_set());​
println!(" 目标存储桶: {}", rule.destination().bucket());​
println!(" 目标地域: {}", rule.destination().location());​
}​
},​
Err(err) => {​
match err {​
TosError::TosClientError { message, .. } => {​
eprintln!("客户端错误: {}", message);​
},​
TosError::TosServerError { request_id, ec, .. } => {​
eprintln!("服务端错误: 请求ID={}, 错误码={}", request_id, ec);​
},​
_ => {​
eprintln!("未知错误: {:?}", err);​
}​
}​
}​
}​
}​
​
​
相关文档​
关于 GetBucketReplication 的 API 文档,请参见 GetBucketReplication。​
​
最近更新时间:2025.12.22 16:33:49
这个页面对您有帮助吗?
有用
有用
无用
无用