实例
创建实例(通过指定实例套餐规格)
使用以下代码可以创建BCC实例,包括普通型BCC、存储优化型BCC、计算优化型BCC、大数据机型BCC、GPU机型BCC、FPGA机型BCC:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
IsOpenHostnameDomain := true
AutoSeqSuffix := true
RelationTag := false
IsOpenIpv6 := true
CdsAutoRenew := true
argsV2 := &api.CreateInstanceBySpecArgsV2{
// 镜像ID
ImageId: "m-***",
// 实例规格
Spec: "bcc.g5.c1m4",
// 待创建虚拟机实例的系统盘大小,单位GB,默认是40GB,范围为[40, 2048]GB,超过40GB按照云磁盘价格收费。注意指定的系统盘大小需要满足所使用镜像最小磁盘空间限制。
RootDiskSizeInGb: 20,
// 待创建虚拟机实例系统盘介质,默认使用SSD型云磁盘
RootDiskStorageType: api.StorageTypeEnhancedPl1,
// 待创建的CDS磁盘列表
CreateCdsList: []api.CreateCdsModel{
{
CdsSizeInGB: 50,
StorageType: api.StorageTypeEnhancedPl1,
},
},
// 公网带宽,单位为Mbps。必须为0~200之间的整数,为0表示不分配公网IP,默认为0Mbps
NetWorkCapacityInMbps: 10,
// 长度1~65个字节,字母开头,可包含字母数字-_/.字符。若不传该参数,服务会自动生成name。
EipName: "eipN***",
// 公网带宽计费方式,可选参数详见internetChargeType,若不指定internetChargeType,默认付费方式同BCC,预付费默认为包年包月按带宽,后付费默认为按使用带宽计费。
InternetChargeType: "BANDWIDTH_PREPAID",
// 批量创建(购买)的虚拟机实例个数,必须为大于0的整数,可选参数,缺省为1
PurchaseCount: 1,
// 虚拟机名字(可选)。默认都不指定name。如果指定name:批量时name作为名字的前缀。
//,后缀生成方式:name{ -序号}。如果没有指定name,则自动生成,方式:{instance-八位随机串-序号}。
//注:随机串从0~9a~z生成;序号按照count的数量级,依次递增,如果count为100,则序号从000~100递增,如果为10,则从00~10递增。
//支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
Name: "instance-***",
// 虚拟机主机名。默认都不指定hostname。如果指定hostname:批量时hostname作为名字的前缀。后端将加上后缀,后缀生成方式:name{ -序号}。
Hostname: "hostn***",
// 是否自动生成hostname domain(可选参数) 是:true 否:false
IsOpenHostnameDomain: &IsOpenHostnameDomain,
// 是否自动生成name和hostname有序后缀(可选参数) 是:true 否:false
AutoSeqSuffix: &AutoSeqSuffix,
// 待创建实例是否开启ipv6,只有当镜像和子网都支持ipv6时才可开启,true表示开启,false表示关闭,不传表示自动适配镜像和子网的ipv6支持情况
IsOpenIpv6: &IsOpenIpv6,
// 待创建的实例管理员密码,8-16位字符,英文,数字和符号必须同时存在,符号仅限!@#$%^*()。
AdminPass: "***",
// 订单、计费相关参数
Billing: api.Billing{
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
ReservationLength: 1,
ReservationTimeUnit: "Month",
},
},
// 指定zone信息,默认为空,由系统自动选择,可通过调用查询可用区列表接口查询可用区列表。zoneName命名规范是“国家-region-可用区序列",小写,例如北京可用区A为"cn-bj-a"。
ZoneName: "cn-bj-a",
// 指定subnet信息,为空时将使用默认子网
SubnetId: "sbn-***",
// 指定securityGroupIds信息,为空时将使用默认安全组
SecurityGroupIds: []string{"g-***"},
// 待创建实例指定的标签是否需要和已有标签键进行关联,默认为false。注意值为true时要保证该标签键已存在
RelationTag: &RelationTag,
// cds是否自动续费 是:true 否:false
CdsAutoRenew: &CdsAutoRenew,
// 自动快照策略ID
AspId: "asp-***",
// 指定实例所在的部署集id列表
DeployIdList: []string{"dset-***"},
// 指定弹性高性能计算集群id, 仅支持RDMA网络的套餐
EhcClusterId: "ehc-***"
}
createResult, err := bccClient.CreateInstanceBySpecV2(argsV2)
fmt.Println(err)
fmt.Println(createResult)
}
提示:
- 创建BCC请求是一个异步请求,返回200表明订单生成,后续可以通过查询返回的实例id信息了解BCC虚机的创建进度。
- 本接口用于创建一个或多个同配虚拟机实例。
- 创建实例需要实名认证,没有通过实名认证的可以前往百度开放云官网控制台中的安全认证下的实名认证中进行认证。
- 创建计费方式为后付费的实例需要账户现金余额+通用代金券大于100;预付费方式的实例则需要账户现金余额大于等于实例费用。
- 支持批量创建,且如果创建过程中有一个实例创建失败,所有实例将全部回滚,均创建失败,如果创建时包含CDS,CDS也会回滚。
- 缺省情形下,一个实例最多只能挂载5个云磁盘。
- 创建CDS磁盘和临时数据盘时,磁盘容量大小限制为5的倍数。
- 创建实例支持创建和添加临时数据盘,但不支持单独创建或添加临时数据盘。
- 临时数据盘不支持挂载、卸载、删除。
- 普通实例的临时数据盘最大不能超过500G。
- 指定子网和安全组创建,要求子网和安全组必须同时指定或同时不指定,同时指定的子网和安全组必须同属于一个VPC,都不指定会使用默认子网和默认安全组。
- 指定公网IP带宽创建,计费方式为按照带宽计费。
- 创建接口为异步创建,可通过查询实例详情接口查询实例状态
- 每个实例最多只能购买一块临时数据盘。
- 实例的临时数据盘默认只有hp1类型。
- 创建存储优化型实例必须购买临时数据盘,通过ephemeralDisks指定临时盘数据盘大小,默认nvme类型数据盘,无需指定。
创建竞价实例
使用以下代码可以创建BCC实例:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.CreateInstanceArgs{
// 镜像ID
ImageId: "m-***",
// 待创建虚拟机实例的类型
InstanceType: "N6",
CpuCount: 1,
MemoryCapacityInGB: 4,
BidModel: "market",
// 待创建虚拟机实例的系统盘大小,单位GB,默认是40GB,范围为[40, 2048]GB,超过40GB按照云磁盘价格收费。注意指定的系统盘大小需要满足所使用镜像最小磁盘空间限制。
RootDiskSizeInGb: 20,
// 待创建虚拟机实例系统盘介质,默认使用SSD型云磁盘
RootDiskStorageType: api.StorageTypeEnhancedPl1,
// 待创建的CDS磁盘列表
CreateCdsList: []api.CreateCdsModel{
{
CdsSizeInGB: 50,
StorageType: api.StorageTypeEnhancedPl1,
},
},
// 公网带宽,单位为Mbps。必须为0~200之间的整数,为0表示不分配公网IP,默认为0Mbps
NetWorkCapacityInMbps: 10,
// 长度1~65个字节,字母开头,可包含字母数字-_/.字符。若不传该参数,服务会自动生成name。
EipName: "eipN***",
// 批量创建(购买)的虚拟机实例个数,必须为大于0的整数,可选参数,缺省为1
PurchaseCount: 1,
// 虚拟机名字(可选)。默认都不指定name。如果指定name:批量时name作为名字的前缀。
//,后缀生成方式:name{ -序号}。如果没有指定name,则自动生成,方式:{instance-八位随机串-序号}。
//注:随机串从0~9a~z生成;序号按照count的数量级,依次递增,如果count为100,则序号从000~100递增,如果为10,则从00~10递增。
//支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
Name: "instance-***",
// 虚拟机主机名。默认都不指定hostname。如果指定hostname:批量时hostname作为名字的前缀。后端将加上后缀,后缀生成方式:name{ -序号}。
Hostname: "hostn***",
// 待创建的实例管理员密码,8-16位字符,英文,数字和符号必须同时存在,符号仅限!@#$%^*()。
AdminPass: "***",
// 订单、计费相关参数
Billing: api.Billing{
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
ReservationLength: 1,
ReservationTimeUnit: "Month",
},
},
// 指定zone信息,默认为空,由系统自动选择,可通过调用查询可用区列表接口查询可用区列表。zoneName命名规范是“国家-region-可用区序列",小写,例如北京可用区A为"cn-bj-a"。
ZoneName: "cn-bj-a",
// 指定subnet信息,为空时将使用默认子网
SubnetId: "sbn-***",
// 指定securityGroupIds信息,为空时将使用默认安全组
SecurityGroupIds: []string{"g-***"},
// 自动快照策略ID
AspId: "asp-***",
// 指定实例所在的部署集id列表
DeployIdList: []string{"dset-***"},
}
createResult, err := bccClient.CreateBidInstance(args)
fmt.Println(err)
fmt.Println(createResult)
}
创建实例
使用以下代码可以创建BCC实例,包括专属实例、普通型Ⅰ 型实例、普通型Ⅱ型实例、存储优化型BCC、计算优化型BCC
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
IsOpenHostnameDomain := true
AutoSeqSuffix := true
RelationTag := false
IsOpenIpv6 := true
CdsAutoRenew := true
argsV2 := &api.CreateInstanceArgsV2{
// 镜像ID
ImageId: "m-***",
// 待创建虚拟机实例的类型
InstanceType: "N6",
// 实例的CPU核数
CpuCount: 1,
// 实例的内存大小,单位为GB
MemoryCapacityInGB: 4,
// 待创建虚拟机实例的系统盘大小,单位GB,默认是40GB,范围为[40, 2048]GB,超过40GB按照云磁盘价格收费。注意指定的系统盘大小需要满足所使用镜像最小磁盘空间限制。
RootDiskSizeInGb: 20,
// 待创建虚拟机实例系统盘介质,默认使用SSD型云磁盘
RootDiskStorageType: api.StorageTypeEnhancedPl1,
// 待创建的CDS磁盘列表
CreateCdsList: []api.CreateCdsModel{
{
CdsSizeInGB: 50,
StorageType: api.StorageTypeEnhancedPl1,
},
},
// 公网带宽,单位为Mbps。必须为0~200之间的整数,为0表示不分配公网IP,默认为0Mbps
NetWorkCapacityInMbps: 10,
// 长度1~65个字节,字母开头,可包含字母数字-_/.字符。若不传该参数,服务会自动生成name。
EipName: "eipN***",
// 公网带宽计费方式,可选参数详见internetChargeType,若不指定internetChargeType,默认付费方式同BCC,预付费默认为包年包月按带宽,后付费默认为按使用带宽计费。
InternetChargeType: "BANDWIDTH_PREPAID",
// 批量创建(购买)的虚拟机实例个数,必须为大于0的整数,可选参数,缺省为1
PurchaseCount: 1,
// 虚拟机名字(可选)。默认都不指定name。如果指定name:批量时name作为名字的前缀。
//,后缀生成方式:name{ -序号}。如果没有指定name,则自动生成,方式:{instance-八位随机串-序号}。
//注:随机串从0~9a~z生成;序号按照count的数量级,依次递增,如果count为100,则序号从000~100递增,如果为10,则从00~10递增。
//支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
Name: "instance-***",
// 虚拟机主机名。默认都不指定hostname。如果指定hostname:批量时hostname作为名字的前缀。后端将加上后缀,后缀生成方式:name{ -序号}。
Hostname: "hostn***",
// 是否自动生成hostname domain(可选参数) 是:true 否:false
IsOpenHostnameDomain: &IsOpenHostnameDomain,
// 是否自动生成name和hostname有序后缀(可选参数) 是:true 否:false
AutoSeqSuffix: &AutoSeqSuffix,
// 待创建实例是否开启ipv6,只有当镜像和子网都支持ipv6时才可开启,true表示开启,false表示关闭,不传表示自动适配镜像和子网的ipv6支持情况
IsOpenIpv6: &IsOpenIpv6,
// 待创建的实例管理员密码,8-16位字符,英文,数字和符号必须同时存在,符号仅限!@#$%^*()。
AdminPass: "***",
// 订单、计费相关参数
Billing: api.Billing{
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
ReservationLength: 1,
ReservationTimeUnit: "Month",
},
},
// 指定zone信息,默认为空,由系统自动选择,可通过调用查询可用区列表接口查询可用区列表。zoneName命名规范是“国家-region-可用区序列",小写,例如北京可用区A为"cn-bj-a"。
ZoneName: "cn-bj-a",
// 指定subnet信息,为空时将使用默认子网
SubnetId: "sbn-***",
// 指定securityGroupIds信息,为空时将使用默认安全组
SecurityGroupIds: []string{"g-***"},
// 待创建实例指定的标签是否需要和已有标签键进行关联,默认为false。注意值为true时要保证该标签键已存在
RelationTag: &RelationTag,
// cds是否自动续费 是:true 否:false
CdsAutoRenew: &CdsAutoRenew,
// 自动快照策略ID
AspId: "asp-***",
// 指定实例所在的部署集id列表
DeployIdList: []string{"dset-***"},
}
createResult, err := bccClient.CreateInstanceV2(argsV2)
fmt.Println(err)
fmt.Println(createResult)
}
提示:
- 创建BCC请求是一个异步请求,返回200表明订单生成,后续可以通过查询返回的实例id信息了解BCC虚机的创建进度。
- 本接口用于创建一个或多个同配虚拟机实例。
- 创建实例需要实名认证,没有通过实名认证的可以前往百度开放云官网控制台中的安全认证下的实名认证中进行认证。
- 创建计费方式为后付费的实例需要账户现金余额+通用代金券大于100;预付费方式的实例则需要账户现金余额大于等于实例费用。
- 支持批量创建,且如果创建过程中有一个实例创建失败,所有实例将全部回滚,均创建失败,如果创建时包含CDS,CDS也会回滚。
- 缺省情形下,一个实例最多只能挂载5个云磁盘。
- 创建CDS磁盘和临时数据盘时,磁盘容量大小限制为5的倍数。
- 创建实例支持创建和添加临时数据盘,但不支持单独创建或添加临时数据盘。
- 临时数据盘不支持挂载、卸载、删除。
- 普通实例的临时数据盘最大不能超过500G。
- 指定子网和安全组创建,要求子网和安全组必须同时指定或同时不指定,同时指定的子网和安全组必须同属于一个VPC,都不指定会使用默认子网和默认安全组。
- 指定公网IP带宽创建,计费方式为按照带宽计费。
- 创建接口为异步创建,可通过查询实例详情接口查询实例状态
- 可通过该接口指定专属服务器创建实例,专属实例不参与计费。专属实例只能通过ephemeralDisks创建临时盘并指定磁盘类型。
- 每个实例最多只能购买一块临时数据盘。
- 实例的临时数据盘默认只有hp1类型。
- 通过instanceType字段指定需要创建的虚机类型,目前API支持创建的虚机类型参见下述InstanceType。参数(instanceType,cpuCount,memoryCapacityInGB)可以确定需要的机型以及配置。
- 创建存储优化型实例必须购买临时数据盘,通过ephemeralDisks指定临时盘数据盘大小,默认nvme类型数据盘,无需指定。
- 创建请求详细使用请参考BCC API 文档创建实例
- 创建FPGA BCC虚机需要使用指定的(CPU、内存、本地数据盘、FPGA卡类型以及专用镜像), 详细请参考BCC API 文档FPGA型BCC可选规格配置
- 创建GPU BCC虚机需要使用指定的(CPU、内存、本地数据盘、GPU卡类型), 详细请参考BCC API 文档GPU型BCC可选规格配置
取消竞价实例订单
通过以下代码可以取消竞价实例订单
cancelBidOrderRequest := &CancelBidOrderRequest{
// 订单ID
OrderId string "orderId"
}
if err := bccClient.CancelBidOrder(cancelBidOrderRequest); err != nil {
fmt.Println("CancelBidOrderRequest failed: ", err)
} else {
fmt.Println("CancelBidOrderRequest success.")
}
查询竞价实例套餐
通过以下代码可以查询竞价实例套餐
if res, err := bccClient.ListBidFlavor(); err != nil {
fmt.Println("List bidding instance flavors failed: ", err)
} else {
fmt.Println("List bidding instance flavors success, result: ", res)
}
查询竞价实例市场价
通过以下代码可以查询竞价实例市场价
createCdsList := []api.CreateCdsModel{{
// 设置CDS磁盘容量,必须为大于0的整数,单位为GB,大小为0~5120G,可选参数
CdsSizeInGB: 40,
// 设置CDS磁盘存储类别,默认为高性能型,可选参数
StorageType: api.StorageTypeHP1,
// 设置快照ID
SnapshotId: "your-snapshot-id",
// 设置加密密钥,true或false
EncryptKey: true,
}}
tagList := []model.TagModel{{
// 设置要查询的tagKey
TagKey: "your-tag-key",
// 设置要查询的tagValue
TagValue: "your-tag-value",
}}
args := &api.GetBidInstancePriceArgs{
// 使用 uuid 生成一个长度不超过64位的ASCII字符串
ClientToken: "random-uuid",
// 设置待查询的虚拟机实例类型,具体可选类型参见InstanceType
InstanceType: "your-choose-instance-type",
// 设置待查询虚拟机实例的CPU核数
CpuCount: 1,
// 设置待查询虚拟机实例的内存容量
MemoryCapacityInGB: 2,
// 设置待查询虚拟机实例的系统盘大小,单位GB,默认是40GB,范围为[40, 100]GB,超过40GB按照云磁盘价格收费。注意指定的系统盘大小需要满足所使用镜像最小磁盘空间限制。
RootDiskSizeInGb: 45,
// 设置待查询虚拟机实例系统盘介质,默认使用SSD型云磁盘,可指定系统盘磁盘类型可参见StorageType
RootDiskStorageType: api.StorageTypeCloudHP1,
// 设置待查询的CDS磁盘列表
CreateCdsList: createCdsList,
// 设置批量查询(购买)的虚拟机实例个数,必须为大于0的整数,可选参数,缺省为1
PurchaseCount: 1,
// 设置虚拟机名字,可选参数
Name: "your-choose-instance-name",
// 设置实例管理员密码(8-16位字符,英文,数字和符号必须同时存在,符号仅限!@#$%^*()),可选参数
AdminPass: "your-admin-pass",
// 设置待查询实例所要绑定的密钥对ID,可选参数
KeypairId: "your-keypair-id",
// 设置自动快照策略ID,可选参数
AspId: "your-asp-id",
// 设置待查询虚拟机实例的镜像ID,可选参数
ImageId: "your-image-id",
// 设置竞价实例出价模型, 市场价: "market" 自定义:"custom",可选参数
BidModel: "your-bid-model",
// 设置竞价实例出价金额,若是自定义出价,且出价金额小于市场价,则不允许创建。当bidModel='custom'时才有效,可选参数
BidPrice: "your-bid-price",
// 设置公网带宽,单位为Mbps。必须为0~200之间的整数,为0表示不分配公网IP,默认为0Mbps,可选参数
NetWorkCapacityInMbps: 20,
// 设置待查询实例指定的标签是否需要和已有标签键进行关联,默认为false。注意值为true时要保证该标签键已存在,可选参数
RelationTag: false,
// 设置待查询的标签列表,可选参数
Tags: tagList,
// 设置securityGroup信息,为空时将使用默认安全组,可选参数
SecurityGroupId: "your-security-group-id",
// 设置subnet信息,为空时将使用默认子网,可选参数
SubnetId: "your-subnet-id",
// 设置指定zone信息,默认为空,由系统自动选择,可选参数
ZoneName: "your-zone-name",
// 设置公网带宽计费方式,可选参数
InternetChargeType: "your-internet-charge-type",
}
if res, err := bccClient.GetBidInstancePrice(args); err != nil {
fmt.Println("Get bidding instance price failed: ", err)
} else {
fmt.Println("Get bidding instance price success, result: ", res)
}
查询实例套餐库存
查询实例资源套餐规格对应的库存。
// 实例类型
instanceType := "instanceType"
// CPU核数
cpuCount := cpuCount
// 内存容量(GB)
memoryCapacityInGB := memoryCapacityInGB
// 可用区名称
zoneName := "zoneNamen"
// GPU卡类型,GPU和VGPU可填
gpuCard := "gpuCard"
// GPU卡数量,GPU和VGPU可填
cardCount := "cardCount"
//本地盘信息
ephemeralDisks := []EphemeralDisks{{
"storageType": "ssd",
"sizeInGB": sizeInGB,
}}
args := &api.CreateInstanceStockArgs{
InstanceType: instanceType,
CpuCount: cpuCount,
MemoryCapacityInGB: memoryCapacityInGB,
ZoneName: zoneName,
GpuCard: gpuCard,
CardCount: cardCount,
EphemeralDisks: ephemeralDisks,
}
if res, err := bccClient.GetInstanceCreateStock(args); err != nil {
fmt.Println("GetInstanceCreateStock failed: ", err)
} else {
fmt.Println("GetInstanceCreateStock success: ", res)
}
实例扩缩容库存查询
实例变配余量查询
// 实例id
instanceId := "instanceId"
// CPU核数
cpuCount := cpuCount
// 内存容量(GB)
memoryCapacityInGB := memoryCapacityInGB
args := &api.CreateInstanceStockArgs{
InstanceId: instanceId,
CpuCount: cpuCount,
MemoryCapacityInGB: memoryCapacityInGB,
}
if res, err := bccClient.ResizeInstanceStockArgs(args); err != nil {
fmt.Println("ResizeInstanceStockArgs failed: ", err)
} else {
fmt.Println("ResizeInstanceStockArgs success: ", res)
}
查询部署集详情
通过以下代码利用部署集ID查询部署集详情
// 设置你要查询的deploySetID
deploySetID := "your-choose-deploy-set-id"
if res, err := bccClient.GetDeploySet(deploySetID); err != nil {
fmt.Println("Delete deploy set failed: ", err)
} else {
fmt.Println("Get deploy set success: ", res)
}
删除实例与部署集之间的关系
以下代码可以删除实例与部署集之间的关系
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
queryArgs := &api.DelInstanceDeployArgs{
DeploySetId: "dset-***", // 部署集ID
InstanceIds: []string{"i-***", "i-***"}, // 实例ID列表
}
res, err := bccClient.DelInstanceDeploySet(queryArgs)
fmt.Println(err)
fmt.Println(res)
}
查询可关机不计费的实例列表
查询可关机不计费的BCC实例列表:
listInstanceArgs := &ListInstanceArgs{
// 批量获取列表的查询起始位置,是一个由系统产生的字符串
Marker string
// 设置返回数据大小,缺省为1000
MaxKeys int
// 通过internal Ip过滤
InternalIp string
// 通过DedicatedHostId过滤
DedicatedHostId string
// 通过ZoneName过滤
ZoneName string
// 通过KeypairId过滤
KeypairId string
}
if res, err := bccClient.GetInstanceNoChargeList(listInstanceArgs); err != nil {
fmt.Println("GetInstanceNoChargeList failed: ", err)
} else {
fmt.Println("GetInstanceNoChargeList success, result: ", res)
}
查询实例列表
以下代码可以查询BCC虚机实例列表,支持通过内网ip、专属服务器id、可用区名称进行筛选
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
listArgs := &api.ListInstanceArgs{
// 批量获取列表的查询的起始位置,是一个由系统生成的字符串
Marker: "i-***",
// 每页包含的最大数量,最大数量通常不超过1000,缺省值为1000
MaxKeys: 1,
// 内网IP
InternalIp: "192.168.***.***",
// 专属服务器ID
DedicatedHostId: "d-***",
// 可用区信息
ZoneName: "cn-bj-d",
// 多个实例ID,英文逗号分割,最多支持100个
InstanceIds: "i-***",
// 多个实例名称,英文逗号分割,最多支持100个
InstanceNames: "instance-***",
// 多个cds磁盘ID,英文逗号分割,最多支持100个
CdsIds: "v-***",
// 多个部署集ID,英文逗号分割,最多支持100个
DeploySetIds: "dset-***",
// 多个安全组ID,英文逗号分割,最多支持100个
SecurityGroupIds: "g-***",
// 支付方式(Prepaid / Postpaid)
PaymentTiming: "Postpaid",
// 实例状态(Recycled / Running / Stopped / Stopping / Starting)
Status: "Running",
// 多个标签,逗号分割,格式:tagKey:tagValue 或 tagKey
Tags: "***",
// vpcId,只能与privateIps查询参数组合使用
VpcId: "vpc-***",
// 多个内网IP,英文逗号分隔,最多支持100个,必须和vpcId组合使用
PrivateIps: "192.168.***.***",
}
res, err := bccClient.ListInstances(listArgs)
fmt.Println(err)
fmt.Println(res)
}
查询回收站实例列表
以下代码可以查询回收站中的BCC虚机实例列表,支持通过虚机id,名字进行筛选
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 批量获取列表的查询的起始位置,是一个由系统生成的字符串,可选参数
marker := "marker***"
// 每页包含的最大数量,最大数量通常不超过1000。缺省值为1000,可选参数
maxKeys := 100
// 设置想要查询的付费类型,可选参数 Prepaid表示预付费,Postpaid表示后付费,不传表示都选
paymentTiming := "Postpaid"
// 设置想要查询的虚机id,可选参数
instanceId := "i-***"
// 设置想要查询的虚机名称,可选参数
name := "instance***"
// 设置想要查询虚机的回收开始时间(北京时间),可选参数 (闭区间)
recycleBegin := "2023-11-29T09:12:35Z"
// 设置想要查询虚机的回收结束时间(北京时间),可选参数 (开区间)
recycleEnd := "2023-11-30T09:12:35Z"
args := &api.ListRecycleInstanceArgs{
Marker: marker,
MaxKeys: maxKeys,
PaymentTiming: paymentTiming,
InstanceId: instanceId,
Name: name,
RecycleBegin: recycleBegin,
RecycleEnd: recycleEnd,
}
result, err := bccClient.ListRecycleInstances(args)
if err != nil {
fmt.Println("list instance failed:", err)
} else {
fmt.Println("list instance success: ", result)
}
}
查询指定实例详情
使用以下代码可以查询指定BCC虚机的详细信息
// 设置你要操作的instanceId
instanceId := "your-choose-instance-id"
result, err := client.GetInstanceDetail(instanceId)
if err != nil {
fmt.Println("get instance detail failed:", err)
} else
fmt.Println("get instance detail success ", result)
}
启动实例
如下代码可以启动一个实例
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置你要操作的instanceId
instanceId := "i-***"
err := bccClient.StartInstance(instanceId)
if err != nil {
fmt.Println("start instance failed:", err)
} else {
fmt.Println("start instance success")
}
}
提示:
- 实例状态必须为Stopped,调用此接口才能成功返回,否则返回409错误
- 该接口调用后,实例会进入Starting状态
停止实例
如下代码可以停止一个实例
// 以下代码可以强制停止一个实例
err := client.StopInstance(instanceId, true)
if err != nil {
fmt.Println("stop instance failed:", err)
} else {
fmt.Println("stop instance success")
}
停止实例(支持强制停止&关机不计费)
使用以下代码停止实例:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
err := bccClient.StopInstanceWithNoCharge(
// 待停止的实例ID
"i-***",
// 指定实例是否强制关机,可选值:True、False,缺省为false
true,
// 指定实例是否关机不计费,可选值:true、false,缺省为false
true)
fmt.Println(err)
}
提示:
- 系统后台会在实例实际 Stop 成功后进入“已停止”状态。
- 只有状态为 Running 的实例才可以进行此操作,否则提示 409 错误。
- 实例支持强制停止,强制停止等同于断电处理,可能丢失实例操作系统中未写入磁盘的数据。
重启实例
如下代码可以重启实例
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置你要操作的instanceId
instanceId := "i-***"
err := bccClient.RebootInstance(instanceId, true)
if err != nil {
fmt.Println("reboot instance failed:", err)
} else {
fmt.Println("reboot instance success")
}
}
提示:
- 只有状态为 Running 的实例才可以进行此操作,否则提示 409 错误。
- 接口调用成功后实例进入 Starting 状态。
- 支持强制重启,强制重启等同于传统服务器的断电重启,可能丢失实例操作系统中未写入磁盘的数据。
修改实例密码
如下代码可以修改实例密码
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 实例ID
instanceId := "i-***"
args := &api.ChangeInstancePassArgs{
// 实例管理员密码
AdminPass: "***",
}
err := bccClient.ChangeInstancePass(instanceId, args)
if err != nil {
fmt.Println("change instance password failed:", err)
} else {
fmt.Println("change instance password success")
}
}
提示: 只有 Running 和 Stopped 状态的实例才可以用调用接口,否则提示 409 错误。
修改实例属性
如下代码可以修改实例属性
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置你要操作的instanceId
instanceId := "i-***"
args := &api.ModifyInstanceAttributeArgs{
// 修改instance的名称
Name: "Instance***",
}
err := bccClient.ModifyInstanceAttribute(instanceId, args)
if err != nil {
fmt.Println("modify instance failed:", err)
} else {
fmt.Println("modify instance success")
}
}
提示:
- 目前该接口仅支持修改实例名称或网卡队列数
修改实例描述
如下代码可以修改实例描述
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置你要操作的instanceId
instanceId := "i-***"
modifyArgs := &api.ModifyInstanceDescArgs{
// 修改描述
Description: "test modify",
}
err := bccClient.ModifyInstanceDesc(instanceId, modifyArgs)
if err != nil {
fmt.Println("modify instance failed:", err)
} else {
fmt.Println("modify instance success")
}
}
修改实例主机名
如下代码可以修改实例主机名
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置你要操作的instanceId
instanceId := "i-***"
args := &api.ModifyInstanceHostnameArgs{
// 设置想要修改的新主机名
Hostname: "new-hostname***",
// 设置是否开启domain,可选参数 true表示开启 false和null 表示关闭
IsOpenHostnameDomain: true,
// 设置是否自动重启,可选参数 true表示重启,false和null表示不重启
Reboot: true,
}
err := client.ModifyInstanceHostname(instanceId, args)
if err != nil {
fmt.Println("modify instance hostname failed:", err)
} else {
fmt.Println("modify instance hostname success")
}
}
重装实例
如下代码可以重装实例
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
IsOpenHostEye := true
IsPreserveData := true
args := &api.RebuildInstanceArgsV2{
// 指定的镜像ID
ImageId: "m-***",
// 机器密码(8-16位字符,英文,数字和符号必须同时存在,符号仅限!@#$%^*()),密码需要加密传输
AdminPass: "***",
// 待重装实例所要绑定的密钥对ID,必须传递adminPass、keypairId其中一个参数
KeypairId: "k-***",
// 是否开启主机安全,默认开启
IsOpenHostEye: &IsOpenHostEye,
// 是否保留数据重装,默认保留
IsPreserveData: &IsPreserveData,
}
// i-*** 为指定的实例ID
err := bccClient.RebuildInstanceV2("i-***", args)
fmt.Println(err)
}
重装实例(批量)
使用以下代码重装实例:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
InstanceIds := []string{"i-***", "i-***"}
IsOpenHostEye := true
IsPreserveData := true
args := &api.RebuildBatchInstanceArgsV2{
// 指定的实例ID列表,最多100个
InstanceIds: InstanceIds,
// 指定的镜像ID
ImageId: "m-***",
// 机器密码(8-16位字符,英文,数字和符号必须同时存在,符号仅限!@#$%^*()),密码需要加密传输
AdminPass: "***",
// 待重装实例所要绑定的密钥对ID,必须传递adminPass、keypairId其中一个参数
KeypairId: "k-***",
// 是否开启主机安全,默认开启
IsOpenHostEye: &IsOpenHostEye,
// 是否保留数据重装,默认保留
IsPreserveData: &IsPreserveData,
}
err := bccClient.BatchRebuildInstancesV2(args)
fmt.Println(err)
}
提示:
- 实例重装后,基于原系统盘的快照会自动删除,基于原系统盘的自定义镜像会保留。
释放实例
如下代码可以释放实例
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
err := bccClient.DeleteInstance("i-cNpT****") // 待删除虚机ID
fmt.Println(err)
}
释放实例(POST)
使用以下代码释放单个后付费云服务器实例:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.DeleteInstanceWithRelateResourceArgs{
// 是否关联释放当前时刻,实例挂载的EIP和数据盘
RelatedReleaseFlag: true,
// 是否释放云磁盘快照
DeleteCdsSnapshotFlag: true,
// 实例释放时是否删除关联的ENI
DeleteRelatedEnisFlag: true,
// 实例释放时是否进入回收站
BccRecycleFlag: true,
}
// i-*** 为待释放实例的ID
err := bccClient.DeleteInstanceWithRelateResource("i-***", args)
fmt.Println(err)
}
批量释放实例(POST)
使用以下代码批量释放实例:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
deleteInstanceWithRelateResourceArgs := &api.BatchDeleteInstanceWithRelateResourceArgs{
// 释放的时候是否关联释放当前时刻,实例挂载的eip+数据盘
// (只有该字段为true时 deleteCdsSnapshotFlag字段才会有效,若该字段为false,deleteCdsSnapshotFlag字段的值无效)
RelatedReleaseFlag: true,
// 设置是否释放云磁盘快照
DeleteCdsSnapshotFlag: true,
// 设置是否进入回收站
BccRecycleFlag: true,
// 设置是否释放弹性网卡
DeleteRelatedEnisFlag: true,
// 批量释放的实例id
InstanceIds: []string{"i-***"},
}
if err := bccClient.BatchDeleteInstanceWithRelateResource(deleteInstanceWithRelateResourceArgs); err != nil {
fmt.Println("release instance failed: ", err)
} else {
fmt.Println("release instance success.")
}
}
释放预付费实例(POST)
释放预付费云服务器实例,释放后实例所使用的物理资源都被收回,相关数据全部丢失且不可恢复。
释放的时候默认只释放云服务器实例和系统盘,用户可以选择是否关联释放云服务器实例挂载的EIP和数据盘,关联的EIP和数据盘需全部释放或全部不释放,不支持选择部分释放,部分不释放。
当选择关联释放EIP和数据盘,云磁盘快照可选择一同关联释放,若数据盘不关联释放,云磁盘快照也不支持关联释放。
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
deletePrepaidInstanceWithRelateResourceArgs := &api.DeletePrepaidInstanceWithRelateResourceArgs{
// 批量释放的实例id
InstanceId: "i-***",
// 是否关联释放当前实例挂载的EIP和数据盘(只有该字段为true时 DeleteCdsSnapshotFlag字段才会有效,若该字段为false,DeleteCdsSnapshotFlag字段的值无效)
RelatedReleaseFlag: true,
// 设置是否释放云磁盘快照
DeleteCdsSnapshotFlag: true,
// 设置是否释放弹性网卡
DeleteRelatedEnisFlag: true,
}
if err := bccClient.DeletePrepaidInstanceWithRelateResource(deletePrepaidInstanceWithRelateResourceArgs); err != nil {
fmt.Println("release instance failed: ", err)
} else {
fmt.Println("release instance success.")
}
}
释放回收站实例
回收站实例7天后自动释放,清理回收站资源,可以使用以下代码将其释放:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 待操作的实例ID
instanceId := "i-***"
// 请求释放回收站中的某个实例
err := bccClient.DeleteRecycledInstance(instanceId)
fmt.Println(err)
}
提示:
- 释放单个云服务器实例,释放后实例所使用的物理资源都被收回,相关数据全部丢失且不可恢复。
- 只有付费类型为Postpaid或者付费类型为Prepaid且已过期的实例才可以释放。
- 实例释放后,已挂载的CDS磁盘自动卸载,,基于此CDS磁盘的快照会保留。
- 实例释放后,基于原系统盘的快照会自动删除,基于原系统盘的自定义镜像会保留。
定时释放 (限定后付费实例)
后付费实例定时释放,到达预设时间后自动释放bcc,自动释放时间可查询实例详情ReleaseTime。设定空字符串可以取消定时释放。请谨慎使用该功能,避免遗忘定时设置
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
err := bccClient.AutoReleaseInstance(
// 实例ID
"i-***",
// 释放时间,格式yyyy-MM-dd'T'HH:mm:ss'Z'
"2024-05-01T07:58:09Z")
fmt.Println(err)
}
提示:
- 只有付费类型为Postpaid的后付费实例允许设定自动释放
- 本实例系统盘快照及实例快照都会被释放
- 本实例已挂载CDS云磁盘都会被自动卸载,不会被释放
- 实例释放后不可恢复
- 关联的网卡资源会被自动卸载,且被释放
释放保护
使用以下代码可以为BCC实例设置释放保护,实例当前设置可查询实例详情DeletionProtection,默认0不保护,1释放保护中(创建和查询入口限v2版本使用):
args := &api.DeletionProtectionArgs {
// 释放保护状态 0不启用,1启用
DeletionProtection : 0,
}
// 设置你要操作的instanceId
instanceId := "your-choose-instance-id"
if err := bccClient.ModifyDeletionProtection(instanceId, args); err != nil {
fmt.Println("modifyDeletionProtection failed: ", err)
} else {
fmt.Println("modifyDeletionProtection success.")
}
提示:
- 后付费和预付费均可开启释放保护
- 已开启释放保护的实例将无法通过控制台或API释放,只有在关闭的情况下才能被手动释放。定时释放,欠费释放以及实例过期释放不受释放保护属性的影响
- 实例释放保护默认不开启
变配实例
使用以下代码可以选择CPU,MemoryCapacityInGB,EphemeralDisks变配指定BCC实例:
resizeInstanceArgs := &ResizeInstanceArgs{
// BCC核数
CpuCount: CpuCount
// BCC的内存大小GB
MemoryCapacityInGB: MemoryCapacityInGB
// 临时盘数据盘大小
EphemeralDisks []EphemeralDisk "ephemeralDisks"
}
// 设置你要操作的instanceId
instanceId := "your-choose-instance-id"
if err := bccClient.ResizeInstance(instanceId, resizeInstanceArgs); err != nil {
fmt.Println("resize instance failed: ", err)
} else {
fmt.Println("resize instance success.")
}
变配实例(通过实例套餐规格)
使用以下代码可以选择CPU,MemoryCapacityInGB,EphemeralDisks变配指定BCC实例:
resizeInstanceArgs := &ResizeInstanceArgs{
// 实例套餐规格
Spec string "spec"
}
// 设置你要操作的instanceId
instanceId := "your-choose-instance-id"
if err := bccClient.ResizeInstanceBySpec(instanceId, resizeInstanceArgs); err != nil {
fmt.Println("resize instance failed: ", err)
} else {
fmt.Println("resize instance success.")
}
绑定安全组
使用以下代码绑定安全组:
// 设置你要操作的instanceId
instanceId := "your-choose-instance-id"
// 设置BCC绑定的安全组
SecurityGroupId := "SecurityGroupId"
if err := bccClient.BindSecurityGroup(instanceId, SecurityGroupId); err != nil {
fmt.Println("Bind Security Group failed: ", err)
} else {
fmt.Println("Bind Security Group success.")
}
解绑安全组
使用以下代码解绑安全组:
// 设置你要操作的instanceId
instanceId := "your-choose-instance-id"
// 设置BCC解绑的安全组
SecurityGroupId := "SecurityGroupId"
if err := bccClient.UnBindSecurityGroup(instanceId, SecurityGroupId); err != nil {
fmt.Println("UnBind Security Group failed: ", err)
} else {
fmt.Println("UnBind Security Group success.")
}
提示:
- 每个实例至少关联一个安全组,默认关联默认安全组。
- 如果实例仅属于一个安全组,尝试移出时,请求会报 403 错。
实例扩缩容
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 待变配的实例配置参数
resizeArgs := &api.ResizeInstanceArgs{
CpuCount: 4, // CPU核数
MemoryCapacityInGB: 16, // 内存大小,单位GB
LiveResize: true, // 是否支持在线扩容,默认为false
}
err := bccClient.ResizeInstance("i-SrzD****", resizeArgs)
fmt.Println(err)
}
提示:
查询实例VNC地址
如下代码可以查询实例的VNC地址
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// i-*** 为虚拟机实例ID
res, err := bccClient.GetInstanceVNC("i-***")
fmt.Println(err)
fmt.Println(res)
}
提示:
- VNC地址一次使用后即失效
- URL地址有效期为10分钟
实例续费
对BCC虚机的续费操作,可以延长过期时长,以下代码可以对实例及关联产品进行续费
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 虚拟机实例ID
instanceId := "i-***"
args := &api.PurchaseReservedArgs{
// 设置实例关联续费标识,默认为空字符串
RelatedRenewFlag: "CDS",
// 订单详情
Billing: api.Billing{
// 续费方式,本接口针对预付费实例进行续费
PaymentTiming: api.PaymentTimingPrePaid,
// 续费时长和单位
Reservation: &api.Reservation{
// 续费时长
ReservationLength: 1,
// 续费单位为月
ReservationTimeUnit: "month",
},
},
// 幂等性Token,是一个长度不超过64位的ASCII字符串
ClientToken: "random-uuid",
}
res, err := bccClient.InstancePurchaseReserved(instanceId, args)
fmt.Println(err)
fmt.Println(res)
}
注意:
关联续费产品(relatedRenewFlag)可选:
- CDS 只对BCC实例关联的预付费CDS进行续费
- EIP 只对BCC实例关联的预付费EIP进行续费
- MKT 只对BCC实例关联的预付费MKT进行续费
- CDS_EIP 只对BCC实例关联的预付费CDS、EIP进行续费
- CDS_MKT 只对BCC实例关联的预付费CDS、MKT进行续费
- EIP_MKT 只对BCC实例关联的预付费EIP、MKT进行续费
- CDS_EIP_MKT 只对BCC实例关联的预付费CDS、EIP、MKT进行续费
提示:
- BCC虚机实例扩缩容期间不能进行续费操作。
- 续费时若实例已欠费停机,续费成功后有个BCC虚机实例启动的过程。
- 该接口是一个异步接口。
- 专属实例不支持续费。
实例变更子网
如下代码可以变更实例的子网
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.InstanceChangeSubnetArgs{
// 虚拟机实例ID
InstanceId: "i-***",
// 变更后的子网ID
SubnetId: "sbn-***",
// 指定内网IP,不指定则随机生成
InternalIp: "10.59.***.***",
// 变更后是否重启
Reboot: true,
// 普通安全组,仅变更vpc时生效,不支持同时指定EnterpriseSecurityGroupIds
SecurityGroupIds: []string{"g-i24fkh******"},
// 企业安全组,仅变更vpc时生效,不支持同时指定SecurityGroupIds
EnterpriseSecurityGroupIds: []string{"esg-i24fkh******"},
}
err := bccClient.InstanceChangeSubnet(args)
fmt.Println(err)
}
提示:
- 变更子网后默认自动重启,用户选择是否执行该操作。
- 变更子网的范围目前仅支持在同AZ下变更子网,不支持跨AZ或跨VPC变更子网,如果从普通子网变更至NAT专属子网请先手动解绑EIP。
实例变更VPC
如下代码可以变更实例的VPC
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.InstanceChangeVpcArgs{
InstanceId: "i-AgPa****", // 实例ID
SubnetId: "sbn-wwqfr3rd****", // 子网ID
InternalIp: "192.168.*.*", // 内网IP
SecurityGroupIds: []string{"g-cfbk8xa0****"}, // 安全组ID
}
err := bccClient.InstanceChangeVpc(args)
if err != nil {
fmt.Println(err)
}
}
提示:
- 变更VPC后默认自动重启,用户选择是否执行该操作。
- 变更VPC后仅保留主网卡主IP(在新子网中自动分配),实例上的辅助IP、弹性网卡和安全组等信息不跟随主体迁移。
- 安全组和企业安全组不能同时指定。
向指定实例批量添加指定ip
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
//创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
privateIps := []string{"192.168.***.***", "192.168.***.***"}
batchAddIpArgs := &api.BatchAddIpArgs{
// 实例ID
InstanceId: "i-***",
// 辅助IP,和SecondaryPrivateIpAddressCount不可同时使用
PrivateIps: privateIps,
// 是否是多IPV6,添加IPV6辅助地址必须是true
AllocateMultiIpv6Addr: false,
// 自动分配IP数量,和PrivateIps不可同时使用
//SecondaryPrivateIpAddressCount: 2,
// 幂等性Token,使用 uuid 生成一个长度不超过64位的ASCII字符串,可选参数
ClientToken: "random-uuid",
}
res, err := bccClient.BatchAddIP(batchAddIpArgs)
fmt.Println(err)
fmt.Println(res)
}
批量删除指定实例的ip
privateIps := []string{"192.168.1.25"}
instanceId := "your-choose-instance-id"
// 幂等性Token,使用 uuid 生成一个长度不超过64位的ASCII字符串,可选参数
clientToken := "clientToken"
batchDelIpArgs := &api.BatchDelIpArgs{
InstanceId: instanceId,
PrivateIps: privateIps,
ClientToken: clientToken,
}
if err := client.BatchDelIP(batchDelIpArgs); err != nil {
fmt.Println("delete ips failed: ", err)
} else {
fmt.Println("delete ips success.")
}
开通自动续费(包含关联产品)
自动续费仅限预付费产品
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
bccAutoRenewArgs := &api.BccCreateAutoRenewArgs{
// 实例ID
InstanceId: "i-***",
// 续费周期单位,可选值:year, month
RenewTimeUnit: "year",
// 续费时长
RenewTime: 1,
// 是否合并cds自动续费,默认值为true
RenewCds: false,
// 是否合并eip自动续费,默认值为true
RenewEip: false,
}
err := bccClient.BatchCreateAutoRenewRules(bccAutoRenewArgs)
fmt.Println(err)
}
关闭自动续费(包含关联产品)
自动续费仅限预付费产品
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
bccDeleteAutoRenewArgs := &api.BccDeleteAutoRenewArgs{
// 实例ID
InstanceId: "i-***",
// 是否合并cds自动续费,默认值为true。
RenewCds: false,
// 是否合并eip自动续费,默认值为true。
RenewEip: false,
}
err := bccClient.BatchDeleteAutoRenewRules(bccDeleteAutoRenewArgs)
fmt.Println(err)
}
后付费资源从回收站恢复计费
仅限后付费产品,预付费资源走续费接口
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.RecoveryInstanceArgs{
InstanceIds: []api.RecoveryInstanceModel{
{
InstanceId: "i-***",
},
{
InstanceId: "i-***",
},
},
}
if err := bccClient.RecoveryInstance(args); err != nil {
fmt.Println("recovery instance failed: ", err)
} else {
fmt.Println("recovery instance success")
}
}
计费变更-转预付费
使用以下代码对实例计费变更-转预付费:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.ChangeToPrepaidRequest{
Duration: 1, // 转预付费时长,单位为月
}
result, err := bccClient.ChangeToPrepaid("i-cVh8****", args) // 虚机ID, 转预付费参数
fmt.Println(err)
fmt.Println(result)
}
实例绑定标签
使用以下代码对实例绑定标签:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/model"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置想要绑定的标签
args := &api.BindTagsRequest{
ChangeTags: []model.TagModel{
{
TagKey: "Key***",
TagValue: "Value***",
},
},
}
// 设置你要操作的instanceId
instanceId := "i-***"
if err := bccClient.BindInstanceToTags(instanceId, args); err != nil {
fmt.Println("BindInstanceToTags failed: ", err)
} else {
fmt.Println("BindInstanceToTags success.")
}
}
实例解绑标签
使用以下代码对实例解绑标签:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/model"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置想要解绑的标签
args := &api.UnBindTagsRequest{
ChangeTags: []model.TagModel{
{
TagKey: "Key***",
TagValue: "Value***",
},
},
}
// 设置你要操作的instanceId
instanceId := "i-***"
if err := bccClient.UnBindInstanceToTags(instanceId, args); err != nil {
fmt.Println("UnBindInstanceToTags failed: ", err)
} else {
fmt.Println("UnBindInstanceToTags success.")
}
}
查询可以变配的实例规格
使用以下代码可以查询可以变配的实例规格
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
listAvailableResizeSpecsArgs := &api.ListAvailableResizeSpecsArgs{
// 实例规格
Spec: "bcc.ic5.c1m1",
// 可用区
Zone: "cn-bj-d",
}
res, _ := bccClient.ListAvailableResizeSpecs(listAvailableResizeSpecsArgs)
fmt.Println(res)
}
批量转预付费
使用以下代码可以将实例批量转预付费,若需要对实例关联的cds变更,则必须在CdsList中传入所有需要转为预付费的cdsId,若所有cds均变更计费传入all。
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
batchChangeInstanceToPrepayArgs := &api.BatchChangeInstanceToPrepayArgs{
Config: []api.PrepayConfig{
{
InstanceId: "i-***",
Duration: 1,
CdsList: []string{
"v-***",
"v-***",
},
},
{
InstanceId: "i-***",
Duration: 1,
CdsList: []string{
"all",
},
},
},
}
result, err := bccClient.BatchChangeInstanceToPrepay(batchChangeInstanceToPrepayArgs)
if err != nil {
fmt.Println("batch change instance to prepay failed:", err)
} else {
fmt.Println("batch change instance to prepay success: ", result)
}
}
批量转后付费
使用以下代码可以将实例批量转后付费, 若需要对实例关联的cds变更,则必须在CdsList中传入所有需要转为后付费的cdsId,若所有cds均变更计费传入all。
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
batchChangeInstanceToPostArgs := &api.BatchChangeInstanceToPostpayArgs{
Config: []api.PostpayConfig{
{
InstanceId: "i-***",
CdsList: []string{
"v-***",
"v-***",
},
},
{
InstanceId: "i-***",
CdsList: []string{
"all",
},
},
},
}
result, err := bccClient.BatchChangeInstanceToPostpay(batchChangeInstanceToPostArgs)
if err != nil {
fmt.Println("batch change instance to postpay failed:", err)
} else {
fmt.Println("batch change instance to postpay success: ", result)
}
}
获取实例角色列表
使用以下代码可以获取实例角色列表
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
result, err := bccClient.ListInstanceRoles()
if err != nil {
fmt.Println("list instance roles failed:", err)
} else {
fmt.Println("list instance roles success: ", result)
}
}
绑定角色
使用以下代码可以为BCC实例绑定角色
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置想要绑定的标签
bindInstanceRoleArgs := &api.BindInstanceRoleArgs{
RoleName: "BCC_***",
Instances: []api.Instances{
{
InstanceId: "i-***",
},
},
}
if err := bccClient.BindInstanceRole(bindInstanceRoleArgs); err != nil {
fmt.Println("bind instance role failed: ", err)
} else {
fmt.Println("bind instance role success.")
}
解绑角色
使用以下代码可以为BCC实例解绑角色
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 设置想要绑定的标签
unbindInstanceRoleArgs := &api.UnBindInstanceRoleArgs{
RoleName: "BCC_***",
Instances: []api.Instances{
{
InstanceId: "i-***",
},
},
}
if err := bccClient.UnBindInstanceRole(unbindInstanceRoleArgs); err != nil {
fmt.Println("unbind instance role failed: ", err)
} else {
fmt.Println("unbind instance role success.")
}
}
添加Ipv6
使用以下代码可以为BCC实例添加Ipv6
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
addIpv6Args := &api.AddIpv6Args{
// 实例ID
InstanceId: "i-***",
// IPv6地址
Ipv6Address: "240c:4081:8005:ca0b:***:***",
// 是否重启实例
Reboot: true,
}
result, err := bccClient.AddIpv6(addIpv6Args)
fmt.Println(result)
fmt.Println(err)
}
释放Ipv6
使用以下代码可以为BCC实例释放Ipv6
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
addIpv6Args := &api.DeleteIpv6Args{
// 实例ID
InstanceId: "i-***",
// 是否重启实例
Reboot: true,
}
err := bccClient.DeleteIpv6(addIpv6Args)
fmt.Println(err)
}
根据实例ID批量查询实例列表
以下代码可以根据实例ID批量查询实例列表
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.ListInstanceByInstanceIdArgs{
// 待查询的实例id列表
InstanceIds: []string{
"i-***",
"i-***",
},
}
result, err := bccClient.ListInstanceByInstanceIds(args)
if err != nil {
fmt.Println("list instance failed:", err)
} else {
fmt.Println("list instance success: ", result)
}
}
查询实例绑定的弹性网卡列表
使用以下代码可以查询实例绑定的弹性网卡列表
// 设置你要操作的instanceId
instanceId := "instanceId"
if res, err := BCC_CLIENT.ListInstanceEnis(instanceId); err != nil {
fmt.Println("Get specific instance eni failed: ", err)
} else {
fmt.Println("Get specific instance eni success, result: ", res)
}