instance_terminate/
instance_terminate.rs

1use 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    // 从环境变量读取密钥
10    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    // 创建客户端
16    let client = TencentCloudClient::new(secret_id, secret_key);
17    
18    // 创建实例服务
19    let instance_service = InstanceService::new(&client);
20    
21    // 设置区域
22    let region = "ap-guangzhou";
23    
24    // 获取要退还的实例ID,可以从命令行参数传入
25    let instance_ids: Vec<String> = env::args()
26        .skip(1)  // 跳过程序名称
27        .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    // 确认是否继续
36    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    // 创建退还实例请求
52    let request = TerminateInstancesRequest {
53        InstanceIds: instance_ids,
54        ReleasePrepaidDataDisks: Some(false),  // 默认不释放包年包月数据盘
55    };
56    
57    // 发送退还请求
58    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}