BCC实例

BCC实例是百度智能云上的云服务器操作实例,也是计费、权限控制等高级功能的管理实体。

创建实例

使用以下代码可以创建BCC实例,包括专属实例、普通型Ⅰ 型实例、普通型Ⅱ型实例、存储优化型BCC、计算优化型BCC:

public static void createInstance(BccClient bccClient) {
    CreateInstanceRequest createInstanceRequest = new CreateInstanceRequest();

    // 设置创建BCC虚机使用的镜像
    createInstanceRequest.setImageId(imageId);
    // 设置创建BCC的密码
    createInstanceRequest.setAdminPass(adminPass);
    // 设置创建BCC的核数
    createInstanceRequest.setCpuCount(newCpuCount);
    // 设置创建BCC的内存大小GB
    createInstanceRequest.setMemoryCapacityInGB(newMemoryInGb);
    // 设置创建BCC使用的网络带宽大小
    createInstanceRequest.setNetworkCapacityInMbps(networkCapacityInMbps);
    // 设置创建BCC的名称
    createInstanceRequest.setName(newName);
    // 设置创建BCC所在的zone
    createInstanceRequest.setZoneName(zoneName);

    // 指定子网和安全组创建,要求子网和安全组必须同时指定或同时不指定,
    // 同时指定的子网和安全组必须同属于一个VPC,都不指定会使用默认子网和默认安全组。
    // 设置创建BCC使用的子网,
    createInstanceRequest.setSubnetId(subnetId);
    // 设置创建BCC使用的安全组
    createInstanceRequest.setSecurityGroupId(securityGroupId);

    List<CreateCdsModel> createCdsModelList = new ArrayList<CreateCdsModel>();
    // 新建空白的CDS数据盘,类型为高性能型
    createCdsModelList.add(new CreateCdsModel().withCdsSizeInGB(cdsSizeInGb).withStorageType("hp1"));
    // 根据CDS数据盘快照snapshotId中创建CDS数据盘,默认使用快照大小创建CDS磁盘
    createCdsModelList.add(new CreateCdsModel().withSnapshotId(snapshotId));
    // 创建需要创建的CDS磁盘列表
    createInstanceRequest.setCreateCdsList(createCdsModelList);

    // 设置创建BCC的付费方式为包年包月计费的预付费
    createInstanceRequest.setBilling(new Billing().withPaymentTiming("Prepaid"));
    // 设置创建BCC的付费方式为后付费
    createInstanceRequest.setBilling(new Billing().withPaymentTiming("Postpaid"));

    List<EphemeralDisk> ephemeralDiskList = new ArrayList<EphemeralDisk>();
    // DCC实例可以创建多块本地盘,需要指定磁盘类型以及大小。
    // 其他类型BCC最多只能使用一块本地盘,使用默认磁盘类型,需要指定磁盘大小。
    ephemeralDiskList.add(new EphemeralDisk().withSizeInGB(sizeInGb));

    // 可以创建一下几种BCC机型

    // 设置需要创建BCC使用的DCC服务器id
    createInstanceRequest.setDedicatedHostId(dedicatedHostId);
    // 设置需要创建的BCC实例类型为普通型BCCⅠ 型
    createInstanceRequest.setInstanceType(InstanceType.N1.name());
    // 设置需要创建的BCC实例类型为普通型BCCⅡ 型
    createInstanceRequest.setInstanceType(InstanceType.N2.name());
    // 设置需要创建的BCC实例类型为计算优化型型
    createInstanceRequest.setInstanceType(InstanceType.C1.name());
    // 设置需要创建的BCC实例类型为存储优化型
    createInstanceRequest.setInstanceType(InstanceType.S1.name());
    // 执行创建BCC请求
    CreateInstanceResponse createInstanceResponse = bccClient.createInstance(createInstanceRequest);
    for (String instanceId : createInstanceResponse.getInstanceIds()) {
        System.out.println(instanceId);
    }
}

    // 创建GPU BCC虚机
    public static void createGpuInstance(BccClient bccClient) {
        CreateInstanceRequest createInstanceRequest = new CreateInstanceRequest();

        // 设置创建BCC虚机使用的镜像
        createInstanceRequest.setImageId(imageId);
        // 设置创建BCC的密码
        createInstanceRequest.setAdminPass(adminPass);
        // 设置创建BCC的核数
        createInstanceRequest.setCpuCount(12);
        // 设置创建BCC的内存大小GB
        createInstanceRequest.setMemoryCapacityInGB(40);
        // 设置创建BCC使用的网络带宽大小
        createInstanceRequest.setNetworkCapacityInMbps(networkCapacityInMbps);
        // 设置创建BCC的名称
        createInstanceRequest.setName(newName);

        List<CreateCdsModel> createCdsModelList = new ArrayList<CreateCdsModel>();
        // 新建空白的CDS数据盘,类型为高性能型
        createCdsModelList.add(new CreateCdsModel().withCdsSizeInGB(cdsSizeInGb).withStorageType("hp1"));
        // 根据CDS数据盘快照snapshotId中创建CDS数据盘,默认使用快照大小创建CDS磁盘
//        createCdsModelList.add(new CreateCdsModel().withSnapshotId(snapshotId));
        // 创建需要创建的CDS磁盘列表
        createInstanceRequest.setCreateCdsList(createCdsModelList);

        // 设置创建BCC的付费方式为包年包月计费的预付费
//        createInstanceRequest.setBilling(new Billing().withPaymentTiming("Prepaid"));
        // 设置创建BCC的付费方式为后付费
        createInstanceRequest.setBilling(new Billing().withPaymentTiming("Postpaid"));

        List<EphemeralDisk> ephemeralDiskList = new ArrayList<EphemeralDisk>();
        // DCC实例可以创建多块本地盘,需要指定磁盘类型以及大小。
        // 其他类型BCC最多只能使用一块本地盘,使用默认磁盘类型,需要指定磁盘大小。
        ephemeralDiskList.add(new EphemeralDisk().withSizeInGB(450));

        // 设置需要创建的BCC实例类型为GPU类型
        createInstanceRequest.setInstanceType(InstanceType.G1.name());
        createInstanceRequest.setGpuCard(GpuCardType.P4);
        createInstanceRequest.setCardCount(1);
        // 执行创建BCC请求
        CreateInstanceResponse createInstanceResponse = bccClient.createInstance(createInstanceRequest);
        for (String instanceId : createInstanceResponse.getInstanceIds()) {
            System.out.println(instanceId);
        }
    }

    // 创建FPGA BCC虚机
    public static void createFpgaInstance(BccClient bccClient) {
        CreateInstanceRequest createInstanceRequest = new CreateInstanceRequest();

        // 设置创建BCC虚机使用的镜像
        createInstanceRequest.setImageId("m-r3BBe7Ep");
        // 设置创建BCC的密码
        createInstanceRequest.setAdminPass(adminPass);
        // 设置创建BCC的核数
        createInstanceRequest.setCpuCount(16);
        // 设置创建BCC的内存大小GB
        createInstanceRequest.setMemoryCapacityInGB(64);
        // 设置创建BCC使用的网络带宽大小
        createInstanceRequest.setNetworkCapacityInMbps(networkCapacityInMbps);
        // 设置创建BCC的名称
        createInstanceRequest.setName(newName);

        List<CreateCdsModel> createCdsModelList = new ArrayList<CreateCdsModel>();
        // 新建空白的CDS数据盘,类型为高性能型
        createCdsModelList.add(new CreateCdsModel().withCdsSizeInGB(cdsSizeInGb).withStorageType("hp1"));
        // 根据CDS数据盘快照snapshotId中创建CDS数据盘,默认使用快照大小创建CDS磁盘
//        createCdsModelList.add(new CreateCdsModel().withSnapshotId(snapshotId));
        // 创建需要创建的CDS磁盘列表
        createInstanceRequest.setCreateCdsList(createCdsModelList);

        // 设置创建BCC的付费方式为包年包月计费的预付费
//        createInstanceRequest.setBilling(new Billing().withPaymentTiming("Prepaid"));
        // 设置创建BCC的付费方式为后付费
        createInstanceRequest.setBilling(new Billing().withPaymentTiming("Postpaid"));

        List<EphemeralDisk> ephemeralDiskList = new ArrayList<EphemeralDisk>();
        // DCC实例可以创建多块本地盘,需要指定磁盘类型以及大小。
        // 其他类型BCC最多只能使用一块本地盘,使用默认磁盘类型,需要指定磁盘大小。
        ephemeralDiskList.add(new EphemeralDisk().withSizeInGB(450));

        // 设置需要创建的BCC实例类型为FPGA类型
        createInstanceRequest.setInstanceType(InstanceType.F1.name());
        // 设置需要创建FPGA卡信息
        createInstanceRequest.setFpgaCard(FpgaCardType.KU115);
        createInstanceRequest.setCardCount(1);
        // 执行创建BCC请求
        CreateInstanceResponse createInstanceResponse = bccClient.createInstance(createInstanceRequest);
        for (String instanceId : createInstanceResponse.getInstanceIds()) {
            System.out.println(instanceId);
        }
    }
  1. 创建BCC请求是一个异步请求,返回200表明订单生成,后续可以通过查询返回的实例id信息了解BCC虚机的创建进度。
  2. 本接口用于创建一个或多个同配虚拟机实例。
  3. 创建实例需要实名认证,没有通过实名认证的可以前往百度开放云官网控制台中的安全认证下的实名认证中进行认证。
  4. 创建计费方式为后付费的实例需要账户现金余额+通用代金券大于100;预付费方式的实例则需要账户现金余额大于等于实例费用。
  5. 支持批量创建,且如果创建过程中有一个实例创建失败,所有实例将全部回滚,均创建失败,如果创建时包含CDS,CDS也会回滚。
    1. 缺省情形下,一个实例最多只能挂载5个云磁盘。
  6. 创建CDS磁盘和临时数据盘时,磁盘容量大小限制为5的倍数。
  7. 创建实例支持创建和添加临时数据盘,但不支持单独创建或添加临时数据盘。
  8. 临时数据盘不支持挂载、卸载、删除。
  9. 普通实例的临时数据盘最大不能超过500G。
  10. 指定子网和安全组创建,要求子网和安全组必须同时指定或同时不指定,同时指定的子网和安全组必须同属于一个VPC,都不指定会使用默认子网和默认安全组。
  11. 指定公网IP带宽创建,计费方式为按照带宽计费。
  12. 创建接口为异步创建,可通过查询实例详情接口查询实例状态
  13. 可通过该接口指定专属服务器创建实例,专属实例不参与计费。专属实例只能通过ephemeralDisks创建临时盘并指定磁盘类型。
  14. 每个实例最多只能购买一块临时数据盘。
  15. 实例的临时数据盘默认只有hp1类型。
  16. 通过instanceType字段指定需要创建的虚机类型,目前API支持创建的虚机类型参见下述InstanceType。参数(instanceType,cpuCount,memoryCapacityInGB)可以确定需要的机型以及配置。
  17. 创建存储优化型实例必须购买临时数据盘,通过ephemeralDisks指定临时盘数据盘大小,默认nvme类型数据盘,无需指定。
  18. 创建请求详细使用请参考BCC API 文档创建实例
  19. 创建FPGA BCC虚机需要使用指定的(CPU、内存、本地数据盘、FPGA卡类型以及专用镜像), 详细请参考BCC API 文档FPGA型BCC可选规格配置
  20. 创建GPU BCC虚机需要使用指定的(CPU、内存、本地数据盘、GPU卡类型), 详细请参考BCC API 文档GPU型BCC可选规格配置

查询实例列表

以下代码可以查询BCC虚机实例列表,支持通过内网ip、专属服务器id、可用区名称进行筛选:

public static void listInstance(BccClient bccClient) {
    ListInstancesRequest listInstancesRequest = new ListInstancesRequest();
    // 设置分页标志
    listInstancesRequest.setMarker(instanceId);
    // 设置分页返回数据大小
    listInstancesRequest.setMaxKeys(maxKey);
    // 通过internalIp过滤虚机BCC列表
    listInstancesRequest.setInternalIp(internalIp);
    // 通过专属服务器dccId过滤BCC列表
    listInstancesRequest.setDedicatedHostId(dedicatedHostId);
    // 通过zoneName过滤BCC虚机列表
    listInstancesRequest.setZoneName(zoneName);
    // 执行查询虚机列表操作
    ListInstancesResponse listInstancesResponse = bccClient.listInstances(listInstancesRequest);

    for (InstanceModel instanceModel : listInstancesResponse.getInstances()) {
        System.out.println(instanceModel.getId());
    }
}

查询实例详情

使用以下代码可以查询指定BCC虚机的详细信息:

public static void getInstanceDetail(BccClient bccClient) {
    // 查询指定BCC虚机的详细信息
    InstanceModel instanceModel = bccClient.getInstance(instanceId).getInstance();
    System.out.println(instanceModel.getName());
}

启动实例

使用以下代码可以启动指定BCC虚机实例:

public static void startInstance(BccClient bccClient) {
    bccClient.startInstance(instanceId);
}

接口调用成功后实例进入 Starting 状态。
实例状态必须为 Stopped,调用此接口才可以成功返回,否则提示409错误。

停止实例

使用以下代码可以停止指定BCC虚机实例:

public static void stopInstance(BccClient bccClient) {
    StopInstanceRequest stopInstanceRequest = new StopInstanceRequest();
    // 设置BCC虚机id
    stopInstanceRequest.setInstanceId(instanceId);
    // 设置是否强制停止,强制停止等同于断电处理,可能丢失实例操作系统中未写入磁盘的数据
    stopInstanceRequest.setForceStop(Boolean.TRUE);
    // 设置是否关机不计费,TRUE为关机不计费,FALSE为关机计费。注意:只有白名单用户才可以实行关机不计费
    stopInstanceRequest.setStopWithNoCharge(Boolean.TRUE);
    // 执行BCC虚机停止操作
    bccClient.stopInstance(stopInstanceRequest);
}
  • 系统后台会在实例实际 Stop 成功后进入“已停止”状态。
  • 只有状态为 Running 的实例才可以进行此操作,否则提示 409 错误。
  • 实例支持强制停止,强制停止等同于断电处理,可能丢失实例操作系统中未写入磁盘的数据。

重启实例

使用以下代码可以重启指定BCC虚机实例:

public static void rebootInstance(BccClient bccClient) {
    RebootInstanceRequest rebootInstanceRequest = new RebootInstanceRequest();
    // 设置BCC虚机id
    rebootInstanceRequest.setInstanceId(instanceId);
    // 设置是否强制停止,强制停止等同于断电处理,可能丢失实例操作系统中未写入磁盘的数据
    rebootInstanceRequest.setForceStop(Boolean.TRUE);
    // 执行BCC虚机重启操作
    bccClient.rebootInstance(rebootInstanceRequest);
}
  • 只有状态为 Running 的实例才可以进行此操作,否则提示 409 错误。
  • 接口调用成功后实例进入 Starting 状态。
  • 支持强制重启,强制重启等同于传统服务器的断电重启,可能丢失实例操作系统中未写入磁盘的数据。

修改实例密码

使用以下代码可以修改指定虚机的管理员密码:

public static void modifyInstancePassword(BccClient bccClient) {
    ModifyInstancePasswordRequest modifyInstancePasswordRequest = new ModifyInstancePasswordRequest();
    // 设置BCC虚机id
    modifyInstancePasswordRequest.setInstanceId(instanceId);
    // 设置BCC虚机新密码
    modifyInstancePasswordRequest.setAdminPass(adminPass);
    // 执行修改BCC实例密码操作
    bccClient.modifyInstancePassword(modifyInstancePasswordRequest);
}

只有 Running 和 Stopped 状态的实例才可以用调用接口,否则提示 409 错误。

修改实例属性

修改实例名称

使用以下代码可以修改指定虚机的命名,目前只支持修改BCC虚机的名称属性:

public static void modifyAttributeInstance(BccClient bccClient) {
     ModifyInstanceAttributesRequest modifyInstanceAttributesRequest = new ModifyInstanceAttributesRequest();
     // 设置BCC虚机id 
     modifyInstanceAttributesRequest.setInstanceId(instanceId);
     // 设置BCC虚机新名称 
     modifyInstanceAttributesRequest.setName(newName);
     // 执行修改BCC实例属性操作 
     bccClient.modifyInstanceAttributes(modifyInstanceAttributesRequest);
 }

修改实例描述

使用以下代码可以修改特定实例描述信息:

public static void modifyDescInstance(BccClient bccClient) {

    ModifyInstanceDescRequest modifyInstanceDescRequest = new ModifyInstanceDescRequest();

    // 设置BCC虚机id

    modifyInstanceDescRequest.setInstanceId(instanceId);

    // 设置该虚机的描述

    modifyInstanceDescRequest.setDesc(newDesc);

    // 执行修改BCC操作

    bccClient.modifyInstanceDesc(modifyInstanceDescRequest);

}

只有 Running 和 Stopped 状态的实例才可以调用该接口,否则提示 409 错误。

重装实例

使用以下代码可以使用镜像重建指定BCC虚机实例:

public static void rebuildInstance(BccClient bccClient) {
    RebuildInstanceRequest rebuildInstanceRequest = new RebuildInstanceRequest();
    // 设置BCC虚机id
    rebuildInstanceRequest.setInstanceId(instanceId);
    // 设置重装BCC虚机需要的镜像id
    rebuildInstanceRequest.setImageId(imageId);
    // 设置BCC虚机新密码
    rebuildInstanceRequest.setAdminPass(adminPass);
    // 执行重装BCC虚机操作
    bccClient.rebuildInstance(rebuildInstanceRequest);
}

实例重装后,基于原系统盘的快照会自动删除,基于原系统盘的自定义镜像会保留。

释放实例

对于后付费Postpaid以及预付费Prepaid过期的BCC虚机实例,可以使用以下代码将其释放:

public static void releaseInstance(BccClient bccClient) {
    bccClient.releaseInstance(instanceId);
}
  • 释放单个云服务器实例,释放后实例所使用的物理资源都被收回,相关数据全部丢失且不可恢复。
  • 只有付费类型为Postpaid或者付费类型为Prepaid且已过期的实例才可以释放。
  • 实例释放后,已挂载的CDS磁盘自动卸载,,基于此CDS磁盘的快照会保留。
  • 实例释放后,基于原系统盘的快照会自动删除,基于原系统盘的自定义镜像会保留。

实例扩缩容

支持对BCC虚机的CPU以及内存进行扩缩容操作,具体可参考以下代码:

public static void resizeInstance(BccClient bccClient) {
    ResizeInstanceRequest resizeInstanceRequest = new ResizeInstanceRequest();
    // 设置BCC虚机id
    resizeInstanceRequest.setInstanceId(instanceId);
    // 设置新的CPU个数
    resizeInstanceRequest.setCpuCount(newCpuCount);
    // 设置新的BCC虚机内存,单位GB
    resizeInstanceRequest.setMemoryCapacityInGB(newMemoryInGb);
    // 执行BCC实例扩缩容
    bccClient.resizeInstance(resizeInstanceRequest);
}
  • 实例计费方式为预付费时,不能进行缩容操作
  • 实例计费方式为后付费时,可弹性扩缩容
  • 只有实例Running或Stopped状态时可以进行扩缩容操作
  • 实例扩缩容之后会重启一次
  • 异步接口,可通过查询实例详情接口查看扩缩容状态是否完成
  • 专属实例可以通过指定的cpu、内存以及临时盘大小,专属实例临时盘大小只支持扩容而不支持缩容,具体请参考API文档 实例扩缩容

将实例加入安全组

以下代码可以将指定BCC虚机实例加入到指定安全组内:

public static void bindInstanceToSecurityGroup(BccClient bccClient) {
    BindSecurityGroupRequest bindSecurityGroupRequest = new BindSecurityGroupRequest();
    // 设置安全组id
    bindSecurityGroupRequest.setSecurityGroupId(securityGroupId);
    // 设置BCC虚机实例id
    bindSecurityGroupRequest.setInstanceId(instanceId);
    // 执行将实例加入安全组操作
    bccClient.bindInstanceToSecurityGroup(bindSecurityGroupRequest);
}

每个实例最多关联10个安全组。

将实例移出安全组

以下代码可以将指定实例移出指定安全组中:

public static void unbindInstanceFromSecurityGroup(BccClient bccClient) {
    UnbindSecurityGroupRequest unbindSecurityGroupRequest = new UnbindSecurityGroupRequest();
    // 设置安全组id
    unbindSecurityGroupRequest.setSecurityGroupId(securityGroupId);
    // 设置BCC虚机实例id
    unbindSecurityGroupRequest.setInstanceId(instanceId);
    // 执行将实例移出安全组操作
    bccClient.unbindInstanceFromSecurityGroup(unbindSecurityGroupRequest);
}
  • 每个实例至少关联一个安全组,默认关联默认安全组。
  • 如果实例仅属于一个安全组,尝试移出时,请求会报 403 错。

查询实例VNC地址

使用以下代码可以查询指定BCC虚机实例的VNC URL:

public static void getInstanceVnc(BccClient bccClient) {
    System.out.println(bccClient.getInstanceVnc(instanceId).getVncUrl());
}
  • VNC地址一次使用后即失效
  • URL地址有效期为10分钟

实例续费

对BCC虚机的续费操作,可以延长过期时长,以下代码可以对磁盘进行续费:

public static void purchaseReservedInstance(BccClient bccClient) {
    PurchaseReservedInstanceRequeset purchaseReservedInstanceRequeset = new PurchaseReservedInstanceRequeset();
    // 设置BCC虚机id
    purchaseReservedInstanceRequeset.setInstanceId(instanceId);
    // 设置billing信息
    Billing billing = new Billing();
    // 设置续费时长,单位目前只支持'月'为单位
    billing.setReservation(new Reservation().withReservationLength(reservationLength));
    // 设置billing信息
    purchaseReservedInstanceRequeset.setBilling(billing);
    // 执行BCC虚机续费
    bccClient.purchaseReservedInstance(purchaseReservedInstanceRequeset);
}
  • BCC虚机实例扩缩容期间不能进行续费操作。
  • 续费时若实例已欠费停机,续费成功后有个BCC虚机实例启动的过程。
  • 该接口是一个异步接口。
  • 专属实例不支持续费。