在需要大量创建按量付费实例的情况下,您可以通过调用API接口完成创建操作更为高效。本文主要介绍如何通过编写调用CreateAutoProvisioningGroup API接口的Java代码批量创建ECS按量付费实例,以及对比RunInstances和CreateAutoProvisioningGroup接口的功能、优劣势。
背景信息
在业务需要使用按量付费ECS实例的场景下,RunInstances
是使用最频繁的API。RunInstances
拥有一次调用能够最多创建100台ECS实例的能力,但是在实际的生产环境中,如果需要超过100台的大批量创建ECS实例场景,直接使用RunInstances
会存在一定的技术瓶颈。更多信息,请参见RunInstances创建实例时存在的问题。
如果您已了解RunInstances
批量创建实例过程中存在的技术瓶颈,可以跳过该章节。
为了解决大批量创建ECS实例的需求场景,阿里云提供了弹性供应组,您可以通过CreateAutoProvisioningGroup
创建弹性供应组,一键式的部署跨计费方式、跨可用区、跨实例规格族的实例集群。相较于RunInstances
,CreateAutoProvisioningGroup
更适合大批量创建ECS实例的业务场景。两者的功能对比与优势分析,请参见RunInstances与CreateAutoProvisioningGroup功能对比以及弹性供应组的优势。
RunInstances与CreateAutoProvisioningGroup功能对比
本章节对比RunInstances与CreateAutoProvisioningGroup两接口的部分功能,使您可以快速了解两者的差异,选择合适的创建实例方式。
对比项 | RunInstances | CreateAutoProvisioningGroup |
单次批量创建实例的数量上限 | 100台 | 1000台(vCPU上限为10000) |
容量交付方式 | 实例数量 | 实例数量、vCPU核数、实例规格的权重等 |
是否支持多可用区 | 否 | 是 |
是否支持多个实例规格 | 否 | 是 |
是否支持多种磁盘规格 | 否 | 是 |
是否提供了创建实例的策略 | 否 | 是。提供了如下策略:
|
交付稳定性 | 受资源库存影响较大 | 多可用区、多实例规格的配置组合有效降低了资源库存造成的影响 |
API响应格式 | 同步返回创建结果 | 同步返回创建结果 |
创建实例的方式由RunInstances
更换为CreateAutoProvisioningGroup
的部分示例场景:
如果您之前使用
RunInstances
在单可用区、单实例规格的配置下批量创建实例,更换为CreateAutoProvisioningGroup
后,您只需配置一组实例规格与可用区的组合,即可实现批量创建实例。如果您之前使用
RunInstances
时手动设置了业务部署方案,更换为CreateAutoProvisioningGroup
后,将由系统为您提供一键式的多可用区、多实例规格、多磁盘配置的部署能力,并且系统提供了多种创建实例的策略供您选择。例如:您之前手动设置了遍历多个实例规格及可用区的方案进行
RunInstances
调用,以提高实例创建的成功率。更换为CreateAutoProvisioningGroup
后,您只需要通过参数配置多个实例规格及可用区的组合,选择合适的创建策略,系统将自动完成批量创建实例的操作。
弹性供应组的创建策略存在使用限制,单次最大可创建1000台实例,如果指定了实例规格的权重(WeightedCapacity
),则单次创建的最大加权容量为10000。
RunInstances创建实例时存在的问题
基于RunInstances
功能的限制,您在大批量创建实例时,可能遇到下表所示的问题。
问题 | 说明 | 解决方案 |
批量创建的能力有限 | 调用一次RunInstances最多可以创建100台ECS实例。 | 当您需要创建大于100台ECS实例时,需要通过循环或并发的方式多次调用该接口,以完成业务需求。 |
批量创建的稳定性不足 | 调用RunInstances只支持设置单可用区、单实例规格。因此,在批量创建ECS实例的过程中,可能会出现实例规格的库存不足、停止售卖或使用限制等问题。引发以下情况:
|
|
创建策略过于单一 | RunInstances仅支持设置单可用区、单实例规格。如果您的业务需要多可用区部署实现异地容灾、需要按照最低成本创建ECS实例等,则需要您自行构建业务部署方案,以保障实例的成功部署。自行构建的业务部署方案存在以下问题:
| 自行解决或联系阿里云提供帮助。 |
弹性供应组的优势
针对RunInstances
批量创建ECS实例存在的问题,阿里云提供了弹性供应组,解决了大批量创建ECS实例的场景下存在的问题。弹性供应组支持一键部署跨计费方式、跨可用区、跨实例规格族的实例集群。您可以通过弹性供应组稳定提供计算力,缓解抢占式实例的回收机制带来的不稳定因素,免去重复手动创建实例的繁琐操作。本章节主要介绍弹性供应组的优势。
优势 | 说明 |
批量创建ECS实例的数量上限更高 | 弹性供应组支持单次创建最多1000台ECS实例。 |
支持设置多可用区、多实例规格、多种磁盘类型 | 弹性供应组支持您配置最多10种实例规格或可用区的组合、最多5种磁盘类型的选择,帮助您实现高可用的批量创建ECS实例。 示例场景: 当您通过弹性供应组提供的均衡可用区分布策略创建ECS实例时,可以配置多个可用区和多个实例规格。按照策略的要求,多个可用区下,创建实例的数量应相对平均,但如果其中某个可用区无法完成创建,弹性供应组会尝试将该可用区待创建的实例数量,转移到其他可用区进行创建。 如果您指定了多种磁盘规格,弹性供应组将按照指定顺序作为各磁盘类型的优先级顺序,当某一种磁盘不可用时,自动更换磁盘类型。 说明 当所有磁盘类型都不可用时,系统将会自动更换其它创建方式,不再尝试该种创建方式。 |
支持多种创建实例的策略 | 针对按量付费实例和抢占式实例,分别提供了以下创建策略:
|
可提高抢占式实例的可用性 | 抢占式实例因其价格优势使用量越来越高,但是其价格的不稳定性与系统回收的特性,造成管理抢占式实例存在一定的难度。您可以通过弹性供应组,实现在低成本的前提下,提高抢占式实例的可用性。具体方式如下:
|
CreateAutoProvisioningGroup最佳实践
本章节提供CreateAutoProvisioningGroup接口对应的Java代码示例,使您快速了解该接口的使用方式。
安装ECS Java SDK以及阿里云核心库。
具体操作,请参见安装Java SDK。
编写调用CreateAutoProvisioningGroup接口的Java代码。
代码示例如下:
CreateAutoProvisioningGroupRequest request = new CreateAutoProvisioningGroupRequest(); request.setRegionId(regionId); request.setLaunchConfigurationImageId(RequestHelper.IMAGE_ID); request.setLaunchConfigurationSecurityGroupId(securityGroupId); request.setTotalTargetCapacity(totalTargetCapacity); request.setPayAsYouGoTargetCapacity(payAsYouGoTargetCapacity); request.setSpotTargetCapacity(spotTargetCapacity); request.setLaunchConfigurationSystemDiskCategory("cloud_ssd"); request.setLaunchConfigurationSystemDiskSize(40); request.setAutoProvisioningGroupType("instant"); // 设置抢占式实例的创建策略 request.setSpotAllocationStrategy("lowest-price"); request.setSpotInstancePoolsToUseCount(spotInstancePoolsToUseCount); // 设置按量付费实例的创建策略 request.setPayAsYouGoAllocationStrategy("prioritized"); request.setMaxSpotPrice(maxSpotPrice); // 多实例规格,多可用区配置信息,最大支持10种 request.setLaunchTemplateConfigs(launchTemplateConfigs); request.setClientToken(clientToken); CreateAutoProvisioningGroupResponse response = client.getAcsResponse(request);
JSON返回值示例如下:
{ "autoProvisioningGroupId":"apg-****", "launchResults":[ { "instanceIds":[ "i-****" ], "instanceType":"ecs.c5.large", "spotStrategy":"NoSpot", "zoneId":"cn-shanghai-b" }, { "instanceIds":[], "instanceType":"ecs.c5.large", "spotStrategy":"NoSpot", "zoneId":"cn-shanghai-b", "errorCode" : "Invalid.Parameter", "errorMsg" : "Specific Parameter 'imageId' is not valid" } ], "requestId":"20DA1E9F-BF7F-4BE7-8204-E4DE58E4FC7B" }
通过CreateAutoProvisioningGroup创建弹性供应组时,您只需要设置批量创建实例的相关配置项,无需关心创建过程,弹性供应组将以尽力交付的方式,完成创建。
说明尽力交付的方式是指,当您配置的某些资源组合无法创建实例时,将自动切换到其他可用的资源组合继续进行创建。该方式创建实例需要一定的时间,并且可能导致实际创建结果与创建策略存在一定的偏差。