instance_terminate/
instance_terminate.rs1use tencent_cloud_sdk::{
2 TencentCloudClient,
3 services::cvm::instance::{InstanceService, TerminateInstancesRequest}
4};
5use std::env;
6
7#[tokio::main]
8async fn main() -> Result<(), Box<dyn std::error::Error>> {
9 let secret_id = env::var("TENCENTCLOUD_SECRET_ID")
11 .expect("请设置环境变量TENCENTCLOUD_SECRET_ID");
12 let secret_key = env::var("TENCENTCLOUD_SECRET_KEY")
13 .expect("请设置环境变量TENCENTCLOUD_SECRET_KEY");
14
15 let client = TencentCloudClient::new(secret_id, secret_key);
17
18 let instance_service = InstanceService::new(&client);
20
21 let region = "ap-guangzhou";
23
24 let instance_ids: Vec<String> = env::args()
26 .skip(1) .collect();
28
29 if instance_ids.is_empty() {
30 eprintln!("请提供至少一个实例ID作为命令行参数");
31 eprintln!("用法: cargo run --example instance_terminate <实例ID1> [<实例ID2> ...]");
32 return Ok(());
33 }
34
35 println!("将退还以下实例:");
37 for id in &instance_ids {
38 println!("- {}", id);
39 }
40 println!("警告: 这个操作不可逆!按量计费实例将被直接销毁,包年包月实例将被移至回收站。");
41 println!("是否继续?[y/N]");
42
43 let mut input = String::new();
44 std::io::stdin().read_line(&mut input)?;
45
46 if input.trim().to_lowercase() != "y" {
47 println!("操作已取消");
48 return Ok(());
49 }
50
51 let request = TerminateInstancesRequest {
53 InstanceIds: instance_ids,
54 ReleasePrepaidDataDisks: Some(false), };
56
57 println!("正在退还实例...");
59 match instance_service.terminate_instances(&request, region).await {
60 Ok(_) => {
61 println!("实例退还请求已提交成功");
62 println!("按量计费实例将被直接销毁,包年包月实例将被移至回收站");
63 },
64 Err(err) => {
65 println!("退还实例失败: {}", err);
66 }
67 }
68
69 Ok(())
70}