instance_create/
instance_create.rs

1use tencent_cloud_sdk::{
2    TencentCloudClient,
3    services::cvm::instance::{
4        InstanceService, RunInstancesRequest, Placement, LoginSettings,
5        SystemDisk, InternetAccessible, EnhancedService, RunSecurityServiceEnabled,
6        RunMonitorServiceEnabled, InstanceChargeType
7    }
8};
9
10#[tokio::main]
11async fn main() -> Result<(), Box<dyn std::error::Error>> {
12    // 从环境变量读取密钥
13    let secret_id = std::env::var("TENCENTCLOUD_SECRET_ID")
14        .expect("请设置环境变量TENCENTCLOUD_SECRET_ID");
15    let secret_key = std::env::var("TENCENTCLOUD_SECRET_KEY")
16        .expect("请设置环境变量TENCENTCLOUD_SECRET_KEY");
17
18    // 创建客户端
19    let client = TencentCloudClient::new(secret_id, secret_key);
20    
21    // 创建实例服务
22    let instance_service = InstanceService::new(&client);
23    
24    // 设置区域
25    let region = "ap-guangzhou";
26    
27    // 创建实例请求参数
28    let request = RunInstancesRequest {
29        // 设置实例位置(广州六区)
30        Placement: Some(Placement {
31            Zone: Some("ap-guangzhou-6".to_string()),
32            ProjectId: None,
33            HostIds: None,
34            HostIps: None,
35            DedicatedClusterId: None,
36        }),
37        
38        // 指定镜像ID - TencentOS
39        ImageId: Some("img-6n21msk1".to_string()),
40        
41        // 实例计费类型 - 竞价实例
42        InstanceChargeType: Some(InstanceChargeType::Spotpaid),
43        
44        // 实例配置 - S5.MEDIUM2
45        InstanceType: Some("S5.MEDIUM2".to_string()),
46        
47        // 系统盘 - 使用CLOUD_BSSD
48        SystemDisk: Some(SystemDisk {
49            DiskType: Some("CLOUD_BSSD".to_string()),
50            DiskId: None,
51            DiskSize: Some(20),
52        }),
53        
54        // 不指定VPC配置,使用默认VPC和子网
55        VirtualPrivateCloud: None,
56        
57        // 使用默认安全组
58        SecurityGroupIds: None,
59        
60        // 实例数量
61        InstanceCount: Some(1),
62        
63        // 实例名称
64        InstanceName: Some("frp".to_string()),
65        
66        // 登录设置
67        LoginSettings: Some(LoginSettings {
68            Password: Some("Test@123456789".to_string()),
69            KeyIds: None,
70            KeepImageLogin: None,
71        }),
72        
73        // 公网带宽 - 不需要公网IP
74        InternetAccessible: Some(InternetAccessible {
75            InternetChargeType: "TRAFFIC_POSTPAID_BY_HOUR".to_string(),
76            InternetMaxBandwidthOut: 0,
77            PublicIpAssigned: Some(false),
78            BandwidthPackageId: None,
79        }),
80        
81        // 增强服务
82        EnhancedService: Some(EnhancedService {
83            SecurityService: Some(RunSecurityServiceEnabled {
84                Enabled: true,
85            }),
86            MonitorService: Some(RunMonitorServiceEnabled {
87                Enabled: true,
88            }),
89            AutomationService: None,
90        }),
91        
92        // 其他参数
93        DataDisks: None,
94        ClientToken: None,
95        HostName: None,
96        TagSpecification: None,
97        ProjectId: None,
98        InstanceChargePrepaid: None,
99    };
100    
101    // 发送创建请求
102    println!("正在创建竞价实例...");
103    match instance_service.run_instances(&request, region).await {
104        Ok(response) => {
105            println!("实例创建请求已提交,实例ID列表:");
106            for id in response.Response.InstanceIdSet {
107                println!("- {}", id);
108            }
109            println!("\n注意:返回实例ID列表并不代表实例创建成功,请通过DescribeInstances接口查询实例状态");
110        },
111        Err(err) => {
112            println!("创建实例失败: {}", err);
113        }
114    }
115    
116    Ok(())
117}