虚机实例
更新时间:2025-08-11
创建BEC虚机实例
在既有实例组服务(serviceId)中创建新的BEC虚机实例
Go
1func createBecVmServiceInstances(client *bec.Client) {
2 systemVolume := &api.SystemVolumeConfig{
3 VolumeType: "SATA", // 系统盘配置,必需
4 Name: "vm-rootfs", // 系统盘名称
5 SizeInGB: 40, // 系统盘大小
6 }
7
8 dataVolumeList := []api.VolumeConfig{} // 数据盘列表,非必需
9
10 dataVolume1 := api.VolumeConfig{
11 Name: "data1", // 数据盘名称
12 VolumeType: "SATA", // 数据盘类型,本地盘类型包括:NVME和SATA;云磁盘类型包括:CDS_SSD或CDS_HDD;独占盘类型包括HDD_PASSTHROUGH和SSD_PASSTHROUGH
13 SizeInGB: 40, // 数据盘大小(单位G)
14 }
15 dataVolumeList = append(dataVolumeList, dataVolume1)
16
17 dataVolume2 := api.VolumeConfig{
18 Name: "data2",
19 VolumeType: "SATA",
20 SizeInGB: 40,
21 }
22 dataVolumeList = append(dataVolumeList, dataVolume2)
23
24 deployInstances := []api.DeploymentInstance{} // 部署区域, 必需
25
26 deploy1 := api.DeploymentInstance{
27 RegionId: "cn-baoding1-ix", // 节点ID,由“国家码-城市-运营商”的小写字母组成字符串。例如 cn-hangzhou-cm,其中国家码标准为ISO 3166-2,城市为拼音,运营商为中国移动cm/中国电信ct/中国联通un/三线ix/bgp。如果传regionId,则可以不传region、serviceProvider、city。
28 Replicas: 2, // 副本数,最小为1, 必需
29 }
30 deployInstances = append(deployInstances, deploy1)
31
32 keyConfig := &api.KeyConfig{
33 Type: "password", // 类型,bccKeyPair为选择密钥对,password为选择的密码
34 AdminPass: "735560bB!", // 虚机密码限制长度为8~32位字符,英文、数字和符号必须同时存在,符号仅限!@#$%^+*()
35 }
36
37 tags := []api.Tag{} // 标签信息, 非必需
38
39 tag := api.Tag{
40 TagKey: "tagKey", // 标签键
41 TagValue: "tagValue", // 标签值
42 }
43 tags = append(tags, tag)
44
45 request := &api.CreateVmServiceArgs{
46 VmName: "vmName", // 虚机实例名称(不传为随机名称), 非必需
47 NeedPublicIp: false, // 是否开通公网,true为公开,false为不公开,缺省为false, 非必需
48 Bandwidth: 100, // 公网带宽大小(-1时为最大值),单位Mbps, 非必需
49 DeployInstances: &deployInstances, // 部署区域, 必需
50 Cpu: 1, // CPU大小,不小于1;随机分配策略必填, 必需
51 Memory: 1, // 内存大小,不小于1;随机分配策略必填, 必需
52 ImageId: "m-iIMvx5zK", // 镜像ID(配合imageType使用), 必需
53 ImageType: "bec", // 镜像类型,取值为bec、bcc,分别表示为公共镜像或bec自定义镜像、bcc自定义镜像,缺省为bcc, 必需
54 NeedIpv6PublicIp: false, // 是否开通IPv6公网,true:表示开通。false:表示不开通。缺省为false, 必需
55 SystemVolume: systemVolume, // 系统盘配置, 必需
56 DataVolumeList: &dataVolumeList, // 数据盘配置, 非必需
57 KeyConfig: keyConfig, // 密码或密钥配置, 必需
58 DisableIntranet: false, // 是否需要内网,true:表示不需要;false:表示需要。缺省为false, 非必需
59 DisableCloudInit: false, // 是否需要网络初始化,true:表示不需要;false:表示需要。缺省为false, 非必需
60 Hostname: "hostname", // 虚机hostname(不传为随机名称)。仅支持小写字母、数字以及-特殊字符,必须以字母开头,长度2-64。, 非必需
61 Tags: &tags, // 标签信息, 非必需
62 }
63
64 response, err := client.CreateVmServiceInstance("s-3vhzeool", request)
65 if err != nil {
66 fmt.Printf("createBecVmServiceInstances error: %v\n", err)
67 return
68 }
69 fmt.Printf("createBecVmServiceInstances response: %+v\n", response)
70}
更新资源配置
更新类型值为resource,表示更新虚机配置,包括CPU、内存、DNS、带宽、网卡、IP地址类型、数据盘。
仅修改带宽时不会导致虚机重启,其余情况默认均会导致虚机重启。
Go
1func updateBecVmDeploymentResource(client *bec.Client) {
2 dataVolumeList := []api.VolumeConfig{}
3
4 dataVolume := api.VolumeConfig{
5 SizeInGB: 30, // 数据盘大小(单位G)
6 VolumeType: "CDS_SSD", // 数据盘类型,本地盘类型包括:NVME和SATA;云磁盘类型包括:CDS_SSD或CDS_HDD;独占盘类型包括HDD_PASSTHROUGH和SSD_PASSTHROUGH
7 Name: "addNewDataDisk", // 数据盘名称
8 // PvcName: "pvc name",
9 }
10 dataVolumeList = append(dataVolumeList, dataVolume) // 数据盘列表(磁盘类型为CDS_HDD或CDS_SSD时可修改磁盘大小),非必需
11
12 systemVolume := &api.SystemVolumeConfig{
13 VolumeType: "NVME", // 系统盘类型,本地盘类型包括:NVME和SATA;云磁盘类型包括:CDS_SSD或CDS_HDD;独占盘类型包括HDD_PASSTHROUGH和SSD_PASSTHROUGH
14 SizeInGB: 40, // 系统盘大小(单位G)
15 Name: "new name", // 系统盘名称
16 // PvcName: "pvc name",
17 } // 系统盘(磁盘类型为CDS_HDD或CDS_SSD时可修改磁盘大小),非必需
18
19 dnsConfig := &api.DnsConfig{
20 DnsType: "CUSTOMIZE", // DNS类型
21 DnsAddress: "129.29.29.29", // DNS地址,多个DNS地址以逗号分隔
22 } // DNS配置,必需
23
24 networkConfig := &api.NetworkConfigUpdateVmInstance{
25 NeedPrivateNetwork: true, // 是否需要内网
26 NeedPublicNetwork: false, // 是否需要公网
27 PrivateNetworkName: "net-name", // 内网名称
28 } // 包含内外网卡名称的设置(包含NetworkConfig),非必需
29
30 request := &api.UpdateVmInstanceArgs{
31 Type: "resource", // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
32 // Spec: "bec.g2.c1m4", // 规格族,传入按指定机型策略修改,不传则按随机分配策略修改。变配不能改变虚机策略或者机型;使用spec参数则不需要填写cpu/memory,非必需
33 Cpu: 1, // CPU大小;修改带宽时必填;随机分配策略必填,非必需
34 Memory: 4, // 内存大小;随机分配策略必填,非必需
35 DataVolumeList: &dataVolumeList, // 数据盘列表(磁盘类型为CDS_HDD或CDS_SSD时可修改磁盘大小),非必需
36 SystemVolume: systemVolume, // 系统盘大小(磁盘类型为CDS_HDD或CDS_SSD时可修改磁盘大小),非必需
37 DnsConfig: dnsConfig, // DNS配置,必需
38 NetworkConfig: networkConfig, // 包含内外网卡名称的设置(包含NetworkConfig),非必需
39 NeedIpv6PublicIp: true, // 是否开通IPv6公网,true:表示开通。false:表示不开通。缺省为false, 非必需
40 Bandwidth: 67.0, // 公网带宽大小(-1时为最大值),单位Mbps, 非必需
41 }
42 // 虚机实例ID,必需
43 response, err := client.UpdateVmInstance("vm-eep8ihx8-cn-baoding-un-y5n1a", request)
44 if err != nil {
45 fmt.Printf("updateBecVmDeploymentResource error: %v\n", err)
46 return
47 }
48 fmt.Printf("updateBecVmDeploymentResource response: %+v\n", response)
49}
更新密钥
目前虚机登录支持密码和密钥两种方式,密码和密钥需要二选一。
密码限制长度为8~32位字符,包括英文、数字和符号,符号仅限!@#$%^+*()。
密钥仅支持BCC密钥。使用前必须先在BCC的华北-北京区域创建密钥对。keyConfig的参数type填bccKeyPair,bccKeyPairIdList是bcc密钥对的keyId列表,keyId可通过BCC查询密钥对列表获得。
Go
1func updateBecVmDeploymentPassword(client *bec.Client) {
2 request := &api.UpdateVmInstanceArgs{
3 Type: "password", // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
4 KeyConfig: &api.KeyConfig{
5 Type: "bccKeyPair", // 类型,bccKeyPair为选择密钥对,password为选择的密码
6 BccKeyPairIdList: []string{"k-1MkI9Laa"}, // 虚机密钥对ID列表
7 }, // 密码或密钥配置,必需
8 }
9 // 虚机实例ID,必需
10 response, err := client.UpdateVmInstance("vm-3vhzeool-cn-baoding1-ix-zzuza", request)
11 if err != nil {
12 fmt.Printf("updateBecVmDeploymentPassword error: %v\n", err)
13 return
14 }
15 fmt.Printf("updateBecVmDeploymentPassword response: %+v\n", response)
16}
更新安全组
仅限于虚机的网络为VPC网络
Go
1func updateBecVmDeploymentSecurityGroup(client *bec.Client) {
2 request := &api.UpdateVmInstanceArgs{
3 // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
4 Type: "securityGroup",
5 // 虚机关联的安全组ID列表。仅限虚机的网络类型为vpc时有效,非必需
6 SecurityGroupIds: []string{"sg-iwha8h3t", "sg-rikyx2oo", "sg-wjtusaam"},
7 }
8 // 虚机实例ID, 必需
9 response, err := client.UpdateVmInstance("vm-3vhzeool-cn-baoding1-ix-zzuza", request)
10 if err != nil {
11 fmt.Printf("updateBecVmDeploymentSecurityGroup error: %v\n", err)
12 return
13 }
14 fmt.Printf("updateBecVmDeploymentSecurityGroup response: %+v\n", response)
15}
更新hostname
Go
1func updateBecVmDeploymentHostname(client *bec.Client) {
2 request := &api.UpdateVmInstanceArgs{
3 // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
4 Type: "hostname",
5 // 虚机主机名,仅支持小写字母、数字以及-特殊字符,必须以字母开头,长度2-64。需同时指定参数type为hostname,非必需
6 Hostname: "vm-host-01",
7 }
8 // 虚机实例ID, 必需
9 response, err := client.UpdateVmInstance("vm-3vhzeool-cn-baoding1-ix-zzuza", request)
10 if err != nil {
11 fmt.Printf("updateBecVmDeploymentHostname error: %v\n", err)
12 return
13 }
14 fmt.Printf("updateBecVmDeploymentHostname response: %+v\n", response)
15}
更新虚拟机名称
Go
1func updateBecVmDeploymentVmName(client *bec.Client) {
2 request := &api.UpdateVmInstanceArgs{
3 // 更新类型。取值为password、vmName、resource、securityGroup、hostname,分别为密码、虚机名字、资源配置、安全组、主机名,必需
4 Type: "vmName",
5 // 实例名称,非必需
6 VmName: "vm-new-name",
7 }
8 // 虚机实例ID, 必需
9 response, err := client.UpdateVmInstance("vm-3vhzeool-cn-baoding1-ix-zzuza", request)
10 if err != nil {
11 fmt.Printf("updateBecVmDeploymentVmName error: %v\n", err)
12 return
13 }
14 fmt.Printf("updateBecVmDeploymentVmName response: %+v\n", response)
15}
获取BEC虚机列表
如下代码可以获取BEC虚机列表:
Go
1func getBecVmInstanceList(client *bec.Client) {
2 request := &api.ListRequest{
3 PageNo: 1, // 页数,缺省值为1
4 PageSize: 10, // 每页个数,取值范围为1~100,缺省值为100
5 KeywordType: "instanceName", // 查询实例的关键字类型,取值为instanceId、serviceId、instanceName、instanceIp、securityGroupId、deploysetId, 分别表示实例ID、服务ID、实例名字、实例IP、 安全组ID、部署集ID
6 Keyword: "wj", // 查询实例的关键字
7 }
8
9 response, err := client.GetVmInstanceList(request)
10 if err != nil {
11 fmt.Printf("getBecVmInstanceList error: %v\n", err)
12 return
13 }
14 fmt.Printf("getBecVmInstanceList response: %+v\n", response)
15}
获取所在节点的BEC虚机列表
使用以下代码可以获取所在节点的BEC虚机列表:
Go
1func getBecNodeVmInstanceList(client *bec.Client) {
2 // 部署实例区域
3 region := "NORTH_CHINA"
4 // 部署实例运营商
5 serviceProvider := "TRIPLE_LINE"
6 // 部署实例城市
7 city := "BAODING1"
8 // 关键词参数
9 listRequest := &api.ListRequest{
10 // KeywordType可选instanceId,vmId,serviceId,vmName,instanceName,instanceIp,internalIp,publicIp
11 KeywordType: "vmName",
12 Keyword: "name",
13 }
14
15 response, err := client.GetNodeVmInstanceList(region, serviceProvider, city, listRequest)
16 if err != nil {
17 fmt.Printf("getBecNodeVmInstanceList error: %v\n", err)
18 return
19 }
20 fmt.Printf("getBecNodeVmInstanceList response: %+v\n", response)
21}
获取BEC虚机详情
使用以下代码可以获取BEC虚机详情:
Go
1func getBecVirtualMachine(client *bec.Client) {
2 // 虚机Id
3 response, err := client.GetVirtualMachine("vm-3vhzeool-cn-baoding1-ix-zzuza")
4 if err != nil {
5 fmt.Printf("getBecVirtualMachine error: %v\n", err)
6 return
7 }
8 fmt.Printf("getBecVirtualMachine response: %+v\n", response)
9}
删除BEC虚机
使用以下代码删除BEC虚机:
Go
1func deleteBecVmInstance(client *bec.Client) {
2 // 虚机Id
3 response, err := client.DeleteVmInstance("vm-3vhzeool-cn-baoding1-ix-zzuza")
4 if err != nil {
5 fmt.Printf("deleteBecVmInstance error: %v\n", err)
6 return
7 }
8 fmt.Printf("deleteBecVmInstance response: %+v\n", response)
9}
重装BEC虚机系统
使用以下代码可以重装BEC虚机系统:
Go
1func reinstallBecVmInstance(client *bec.Client) {
2 request := &api.ReinstallVmInstanceArg{
3 // 密码
4 AdminPass: "735560bB!",
5 ImageId: "m-iIMvx5zK", // 镜像ID(配合imageType使用)
6 ImageType: "bec", // 镜像类型,取值为system、market、bec,分别表示系统盘镜像、市场镜像、BEC镜像
7 }
8 // 虚机Id,必需
9 response, err := client.ReinstallVmInstance("vm-3vhzeool-cn-baoding1-ix-zzuza", request)
10 if err != nil {
11 fmt.Printf("reinstallBecVmInstance error: %v\n", err)
12 return
13 }
14 fmt.Printf("reinstallBecVmInstance response: %+v\n", response)
15}
操作BEC虚机资源
使用以下代码可以操作BEC虚机资源:
Go
1func operateBecVmDeployment(client *bec.Client) {
2 // 虚机ID
3 response, err := client.OperateVmDeployment("vm-3vhzeool-cn-baoding1-ix-zzuza",
4 api.VmInstanceBatchOperateStop) // 动作(start,stop,restart)
5 if err != nil {
6 fmt.Printf("operateBecVmDeployment error: %v\n", err)
7 return
8 }
9 fmt.Printf("operateBecVmDeployment response: %+v\n", response)
10}
获取VM实例监控
使用以下代码可以获取VM实例监控:
Go
1func getBecVmInstanceMetrics(client *bec.Client) {
2 // 虚机id
3 vmId := "vm-3vhzeool-cn-baoding1-ix-wslo9"
4 // 指定运营商ServiceProvider,默认不填为全部(外网)
5 serviceProviderStr := "CHINA_UNICOM"
6 // 起始时间,Unix时间戳,单位秒
7 start := 1754323200
8 // 终止时间,Unix时间戳,单位秒
9 end := 1754409600
10 stepInMin := 5
11 // 监控类型,CPU、MEMORY、BANDWIDTH_RECEIVE、BANDWIDTH_TRANSMIT分别表示CPU、内存、入网带宽、出网带宽
12 metricsType := api.MetricsType("BANDWIDTH_RECEIVE")
13
14 response, err := client.GetVmInstanceMetrics(vmId, serviceProviderStr, start, end, stepInMin, metricsType)
15 if err != nil {
16 fmt.Printf("getBecVmInstanceMetrics error: %v\n", err)
17 return
18 }
19 fmt.Printf("getBecVmInstanceMetrics response: %+v\n", response)
20}
获取相同BEC虚机实例配置
Go
1func getBecVmConfig(client *bec.Client) {
2 // 虚机id, 必需
3 response, err := client.GetVmConfig("vm-3vhzeool-cn-baoding1-ix-wslo9")
4 if err != nil {
5 fmt.Printf("getBecVmConfig error: %v\n", err)
6 return
7 }
8 fmt.Printf("getBecVmConfig response: %+v\n", response)
9}