本文通过调用火山引擎OpenAPI,实现快速部署大量ECS实例,满足用户对高弹性算力的需求。对于社交媒体,在线教育等存在线上热点活动的用户,该方案可以显著提高客户的使用体验。
适用于在短时间内快速交付大量ECS实例的应用场景,例如互娱类、社交媒体类或在线教育类客户,由于热点事件的发生或组织的热点活动,往往需要在极短的时间内获取并使用大量的ECS资源。
在进行本文操作前,您需要完成以下准备工作:
本地计算机操作系统:Windows 10
Postman 版本:v9.31.0
本实践通过调用火山引擎 OpenAPI 实现快速部署大量 ECS 实例。在调用 OpenAPI 前,需要对 VPC 网段、子网网段、安全组、网卡 和 路由表 进行预规划,同时选择需要创建的 ECS 实例规格 和 镜像。 其中 安全组、网卡 和 路由表 在本次实践中为火山引擎默认创建,具体环境以客户实际需求为准。
您可以使用以下网段或其子集作为 VPC 的网段:
本次选择 192.168.0.0/16 作为VPC网段。
子网网段要求如下:
本次选择 192.168.0.0/24 作为子网网段。
登录 火山引擎控制台。
在左侧导航树中,单击“产品与服务 > 云服务器” ,进入 云服务器控制台。
在左侧导航栏选择“实例” ,进入实例列表页面。
单击“创建实例”, 并按下方表格进行配置,即可得到所有可创建的 ECS 实例规格。
类别 | 说明 |
---|---|
计费类型 | 按量计费 |
地域及可用区 | 华北2(北京)可用区A |
本实践选择 通用型g2i ,实例规格: ecs.g2i.large,查看实例规格信息后单击右下角“取消” 。
在左侧导航栏选择“镜像” ,进入镜像列表页面。
在镜像列表页面,即可查看火山引擎 公共镜像,或者可根据需要 导入自定义镜像。
本实践选择 CentOS 7.6 64位 ,镜像ID:image-ebgzajl1peeh8jc6****。
本实践使用 Postman 构建 OpenAPI 请求。相较于其它方式,Postman 具有简单易用的图形用户界面,可以保存接口请求的历史记录,测试集 Collections 可以更有效的管理组织接口,便于在团队之间同步接口数据。
用户需参照 火山引擎官网文档中心 完成 OpenAPI 参数的构建,包括 私有网络 和 云服务器 两部分。本实践涉及的接口请参见 参考文档。
在 Download Postman 页面,单击 “Download the App”,根据本地电脑配置,下载对应安装包。
双击下载好的安装包,软件将自动安装到本地电脑中。
启动 Postman,出现如下图所示界面,说明安装成功。
在 Postman 中,单击 “Collections > +” 创建集合,并重命名为 “Create ECS by OpenAPI”。
在集合中单击 “... > Add request”,依次添加 “CreateVpc”、“CreateSubnet”、“DescribeSecurityGroups”、“RunInstances”、“DescribeInstances” 五个请求。
请求添加完毕后界面如下。
单击 “Environments > +” 创建环境变量,并重命名为“火山引擎OpenAPI”,简化参数请求操作。
参数 | 示例值 | 备注 |
---|---|---|
URL | open.volcengineapi.com | OpenAPI的服务地址。 |
AccessKey | <AccessKey> | 请填写您的AccessKey,获取方式如下: 1. 登录 火山引擎控制台。 2. 将光标移动到右上角账号名称处,单击“密钥管理”。 3. 在密钥管理界面,复制 AccessKey 和 SecretKey。 |
SecretKey | <SecretKey> | 请填写您的SecretKey,获取方式如上所述。 |
说明
创建请求时,在设置对应请求参数后,需在请求参数配置栏手动输入{{URL}}
并保存配置。
选中 “CreateVpc” 请求,完成请求参数部分,并调用环境变量 “火山引擎OpenAPI”。
参数 | 示例值 | 备注 |
---|---|---|
Action | CreateVpc | - |
Version | 2020-04-01 | - |
X-Expires | 300 | - |
CidrBlock | 192.168.0.0/16 | - |
VpcName | vpc-test | - |
Description | 通过OpenAPI批量创建ECS | - |
单击 “Headers”, 在对应页签下完成请求头部分。
参数 | 示例值 | 备注 |
---|---|---|
AccessKey | {{AccessKey}} | 调用环境变量,固定填写{{AccessKey}} |
SecretKey | {{SecretKey}} | 调用环境变量,固定填写 {{SecretKey}} |
Region | cn-beijing | - |
Service | vpc | - |
单击 “Pre-request Script”,在对应页签下完成签名机制的脚本编写,具体脚本用户可根据实际需求参考 签名机制 编写。
单击 “Tests”,在对应页签下输入以下命令,提取接口返回值中的VpcId
,并将其设置为环境变量,供后续请求调用使用。
var json = JSON.parse(responseBody); let foobar = json.Result.VpcId; console.log(foobar) pm.environment.set("vpcid",foobar);
选中 “CreateSubnet” 请求,完成请求参数部分,并调用环境变量“火山引擎OpenAPI”。
参数 | 示例值 | 备注 |
---|---|---|
Action | CreateSubnet | - |
Version | 2020-04-01 | - |
X-Expires | 300 | - |
CidrBlock | 192.168.0.0/24 | - |
VpcId | {{vpcid}} | 调用环境变量,固定填写{{vpcid}} |
ZoneId | cn-beijing-a | - |
SubnetName | sub-test | - |
Description | 通过OpenAPI批量创建ECS | - |
单击 “Headers”, 在对应页签下完成请求头部分。
参数 | 示例值 | 备注 |
---|---|---|
AccessKey | {{AccessKey}} | 调用环境变量,固定填写{{AccessKey}} |
SecretKey | {{SecretKey}} | 调用环境变量,固定填写{{SecretKey}} |
Region | cn-beijing | - |
Service | vpc | - |
单击 “Pre-request Script”,在对应页签下完成签名机制的脚本编写,具体脚本用户可根据实际需求参考 签名机制 编写。
单击 “Tests”,在对应页签下输入以下命令,提取接口返回值中的SubnetId
,并将其设置为环境变量,供后续请求调用使用。
var json = JSON.parse(responseBody); let foobar = json.Result.SubnetId; console.log(foobar) pm.environment.set("subnetid",foobar);
选中 “DescribeSecurityGroups” 请求,完成请求参数部分,并调用环境变量“火山引擎OpenAPI”。
参数 | 示例值 | 备注 |
---|---|---|
Action | DescribeSecurityGroups | - |
Version | 2020-04-01 | - |
X-Expires | 300 | - |
VpcId | {{vpcid}} | 调用环境变量,固定填写{{vpcid}} |
单击 “Headers”, 在对应页签下完成请求头部分。
参数 | 示例值 | 备注 |
---|---|---|
AccessKey | {{AccessKey}} | 调用环境变量,固定填写{{AccessKey}} |
SecretKey | {{SecretKey}} | 调用环境变量,固定填写{{SecretKey}} |
Region | cn-beijing | - |
Service | vpc | - |
单击 “Pre-request Script”,在对应页签下完成签名机制的脚本编写,具体脚本用户可根据实际需求参考 签名机制 编写。
单击 “Tests”,在对应页签下输入以下命令,提取接口返回值中的SecurityGroupId
,并将其设置为环境变量,供后续请求调用使用。
var json = JSON.parse(responseBody); let foobar = json.Result.SecurityGroups[0].SecurityGroupId; console.log(foobar) pm.environment.set("securitygroupid",foobar);
选中 “RunInstances” 请求,完成请求参数部分,并调用环境变量“火山引擎OpenAPI”。
参数 | 示例值 | 备注 |
---|---|---|
Action | RunInstances | - |
Version | 2020-04-01 | - |
X-Expires | 300 | - |
ZoneId | cn-beijing-a | - |
ImageId | image-ebgzajl1peeh8jc6**** | CentOS 7.6 64位 |
InstanceType | ecs.g2i.large | 通用型g2i(2vCPU/8GiB) |
InstanceName | instance-test | - |
Count | 10 | 创建数量 |
Password | password@123 | - |
KeyPairName | keypair |
|
Volumes.1.VolumeType | ESSD | - |
Volumes.1.Size | 40 | - |
Volumes.2.VolumeType | ESSD | - |
Volumes.2.Size | 40 | - |
NetworkInterfaces.1.SubnetId | {{subnetid}} | 调用环境变量,固定填写{{subnetid}} |
NetworkInterfaces.1.SecurityGroupIds.1 | {{securitygroupid}} | 调用环境变量,固定填写{{securitygroupid}} |
InstanceChargeType | PostPaid | - |
UniqueSuffix | true | - |
SuffixIndex | 1 | - |
SecurityEnhancementStrategy | Active | |
HpcClusterId | hpcCluster-1 | 当创建高性能计算 GPU 型实例时,请指定高性能计算集群 ID,本实践不选择 |
单击 “Headers”, 在对应页签下完成请求头部分。
参数 | 示例值 | 备注 |
---|---|---|
AccessKey | {{AccessKey}} | 调用环境变量,固定填写{{AccessKey}} |
SecretKey | {{SecretKey}} | 调用环境变量,固定填写{{SecretKey}} |
Region | cn-beijing | - |
Service | ecs | - |
单击 “Pre-request Script”,在对应页签下完成签名机制的脚本编写,具体脚本用户可根据实际需求参考 签名机制 编写。
选中 “DescribeInstances” 请求,完成请求参数部分,并调用环境变量“火山引擎OpenAPI”。
参数 | 示例值 | 备注 |
---|---|---|
Action | DescribeInstances | - |
Version | 2020-04-01 | - |
X-Expires | 300 | - |
ZoneId | cn-beijing-a | - |
VpcId | {{vpcid}} | 调用环境变量,固定填写{{vpcid}} |
单击 “Headers”, 在对应页签下完成请求头部分。
参数 | 示例值 | 备注 |
---|---|---|
AccessKey | {{AccessKey}} | 调用环境变量,固定填写{{AccessKey}} |
SecretKey | {{SecretKey}} | 调用环境变量,固定填写{{SecretKey}} |
Region | cn-beijing | - |
Service | ecs | - |
单击 “Pre-request Script”,在对应页签下完成签名机制的脚本编写,具体脚本用户可根据实际需求参考 签名机制 编写。
按照下图操作步骤运行集合。
查看运行结果可见,10 台 ECS 服务器已经创建成功。
在首次运行集合后,环境变量中已自动添加了本次实践的{{vpcid}}
、{{subnetid}}
和{{securitygroupid}}
,如需在相同的 VPC 和子网下再次批量创建云主机,仅需执行 RunInstances 和 DescribeInstances 两步即可。
登录 火山引擎控制台。
在左侧导航树中,单击“产品与服务 > 云服务器”,进入 云服务器控制台。
在左侧导航栏单击“实例” ,进入实例列表页面,在顶部导航栏,选择创建实例的所属地域,可以看到 10 台云服务器 ECS 正在运行中,云服务器 ECS 创建成功。