摘要: 为了更方便的实现弹性的资源创建,方便您一次运行多台ECS按量实例来完成应用的开发和部署,我们开放了ECS的批量创建实例接口RunInstances。和目前的CreateInstance相比,RunInstances有下面的优点: 批量提交一定的ECS实例数目,如果库存不足,则直接失败,避免您创建的实例数目不能满足需求而额外产生费用。

为了更方便的实现弹性的资源创建,方便您一次运行多台ECS按量实例来完成应用的开发和部署,我们开放了ECS的批量创建实例接口RunInstances。和目前的CreateInstance相比,RunInstances有下面的优点:

单次可以最多创建100台实例,避免重复调用。
批量提交一定的ECS实例数目,如果库存不足,则直接失败,避免您创建的实例数目不能满足需求而额外产生费用。
实例创建之后,会自动的开始Start,实例会变成Starting状态,直至Running,不需要您调用Start的操作。
创建实例的时候指定了InternetMaxBandwidthOut,则自动为您分配公网IP,不需要您再调用分配IP的操作。
您可以在创建的时候指定自动释放时间,自动释放,不需要您再额外设置自动释放时间。
您也可以一次创建100台的SpotInstance,充分满足您的弹性需求。
创建的参数保持和CreateInstance保持兼容,提供了Amount来设定创建的个数,提供了AutoReleaseTime来设定自动释放时间。
创建返回一个InstanceIdSets会记录相关的InstanceIds,您只需要根据实例ID轮询实例状态即可。
下文以Python为示例,其他的版本SDK都需要大于4.4.3即可。

安装ECS Python SDK
首先确保您已经具备Python的Runtime,本文中使用的Python版本为2.7+。

pip install aliyun-python-sdk-ecs

如果提示您没有权限,请切换sudo 继续执行。

sudo pip install aliyun-python-sdk-ecs

本文使用的sdk版本为4.4.3, 如果您使用是旧版本的sdk,需要你更新下。

批量创建实例
首先创建RunInstancesRequest的实例,然后填入相关需要的参数即可。

下面的例子创建了2台实例,并且添加了自动每隔10秒钟检查一次实例的运行状态。直到实例状态变成Running结束创建流程。

# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"
# your access key secret
ak_secret = "YOU_ACCESS_SECRET"
region_id = "cn-beijing"# your expected instance type
instance_type = "ecs.n4.small"
# 选择的vswitchId
vswitch_id = "vws-xxxxx"
# 使用的镜像信息
image_id = "centos_7_03_64_20G_alibase_20170818.vhd"
# 当前vpc类型的安全组
security_group_id = "sg-xxxxx"# instance number to lunch, support 1-100, default value is 100
amount = 2;# instance auto delete time 按照 ISO8601 标准表示,并需要使用 UTC 时间。格式为 yyyy-MM-ddTHH:mm:ssZ 。 最短在当前时间之后半小时。最长不能超过当前时间起三年
auto_release_time = "2017-12-05T22:40:00Z"clt = client.AcsClient(ak_id, ak_secret, 'cn-beijing')# create instance automatic running
def batch_create_instance():request = build_request()request.set_Amount(amount)_execute_request(request)def _execute_request(request):response = _send_request(request)if response.get('Code') is None:instance_ids = response.get('InstanceIdSets').get('InstanceIdSet')running_amount = 0while running_amount < amount:time.sleep(10)running_amount = check_instance_running(instance_ids)print("ecs instance %s is running", instance_ids)def check_instance_running(instance_ids):request = DescribeInstancesRequest()request.set_InstanceIds(json.dumps(instance_ids))response = _send_request(request)if response.get('Code') is None:instances_list = response.get('Instances').get('Instance')running_count = 0for instance_detail in instances_list:if instance_detail.get('Status') == "Running":running_count += 1return running_countdef build_request():request = RunInstancesRequest()request.set_ImageId(image_id)request.set_VSwitchId(vswitch_id)request.set_SecurityGroupId(security_group_id)request.set_InstanceName("Instance12-04")request.set_InstanceType(instance_type)return request# send open api request
def _send_request(request):request.set_accept_format('json')try:response_str = clt.do_action(request)logging.info(response_str)response_detail = json.loads(response_str)return response_detailexcept Exception as e:logging.error(e)

批量创建实例并自动分配公网IP
相比上面的代码,我们只需要添加一行属性,指定公网的带宽即可。下面的例子中我们默认给实例都分配了1M的按流量带宽。

# create instance with public ip.
def batch_create_instance_with_public_ip():request = build_request()request.set_Amount(amount)request.set_InternetMaxBandwidthOut(1)_execute_request(request)

批量创建实例并自动设置自动释放时间
相比上面的代码,我们只需要添加一行属性,实例的自动释放时间即可。 自动释放时间按照 ISO8601 标准表示,并需要使用 UTC 时间。格式为 yyyy-MM-ddTHH:mm:ssZ 。 最短在当前时间之后半小时。最长不能超过当前时间起三年。

# create instance with auto release time.
def batch_create_instance_with_auto_release_time():request = build_request()request.set_Amount(amount)request.set_AutoReleaseTime(auto_release_time)_execute_request(request)

完整代码如下

#  coding=utf-8# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 4.4.3, you can use command 'pip show aliyun-python-sdk-ecs' to checkimport json
import logging
import timefrom aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequestlogging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S')# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"
# your access key secret
ak_secret = "YOU_ACCESS_SECRET"
region_id = "cn-beijing"# your expected instance type
instance_type = "ecs.n4.small"
# 选择的vswitchId
vswitch_id = "vws-xxxxx"
# 使用的镜像信息
image_id = "centos_7_03_64_20G_alibase_20170818.vhd"
# 当前vpc类型的安全组
security_group_id = "sg-xxxxx"# instance number to lunch, support 1-100, default value is 100
amount = 2;# instance auto delete time 按照 ISO8601 标准表示,并需要使用 UTC 时间。格式为 yyyy-MM-ddTHH:mm:ssZ 。 最短在当前时间之后半小时。最长不能超过当前时间起三年
auto_release_time = "2017-12-05T22:40:00Z"clt = client.AcsClient(ak_id, ak_secret, 'cn-beijing')# create instance automatic running
def batch_create_instance():request = build_request()request.set_Amount(amount)_execute_request(request)# create instance with public ip.
def batch_create_instance_with_public_ip():request = build_request()request.set_Amount(amount)request.set_InternetMaxBandwidthOut(1)_execute_request(request)# create instance with auto release time.
def batch_create_instance_with_auto_release_time():request = build_request()request.set_Amount(amount)request.set_AutoReleaseTime(auto_release_time)_execute_request(request)def _execute_request(request):response = _send_request(request)if response.get('Code') is None:instance_ids = response.get('InstanceIdSets').get('InstanceIdSet')running_amount = 0while running_amount < amount:time.sleep(10)running_amount = check_instance_running(instance_ids)print("ecs instance %s is running", instance_ids)def check_instance_running(instance_ids):request = DescribeInstancesRequest()request.set_InstanceIds(json.dumps(instance_ids))response = _send_request(request)if response.get('Code') is None:instances_list = response.get('Instances').get('Instance')running_count = 0for instance_detail in instances_list:if instance_detail.get('Status') == "Running":running_count += 1return running_countdef build_request():request = RunInstancesRequest()request.set_ImageId(image_id)request.set_VSwitchId(vswitch_id)request.set_SecurityGroupId(security_group_id)request.set_InstanceName("Instance12-04")request.set_InstanceType(instance_type)return request# send open api request
def _send_request(request):request.set_accept_format('json')try:response_str = clt.do_action(request)logging.info(response_str)response_detail = json.loads(response_str)return response_detailexcept Exception as e:logging.error(e)if __name__ == '__main__':print "hello ecs batch create instance"# batch_create_instance()# batch_create_instance_with_public_ip()# batch_create_instance_with_auto_release_time()

通过RunInstances将简化您的资源创建和运行管理。

ECS开放批量创建实例接口RunInstances相关推荐

  1. 阿里云ECS开放批量创建实例接口,实现弹性资源的创建

    摘要: 为了更方便的实现弹性的资源创建,方便用户一次运行多台ECS按量实例来完成应用的开发和部署,阿里云开放了ECS的批量创建实例接口RunInstances,可以单次最多创建100台实例,避免重复调 ...

  2. Unirech阿里云国际版云服务器代充-使用Python批量创建实例

    ​ 当您对海外云服务器有需求时,可选择Unirech阿里云代充,那么在注册好账户之后,下面将介绍如何通过RunInstances批量创建实例接口,可以帮助您一次创建多个阿里云国际版海外云服务器实例来完 ...

  3. python批量创建实例_Django批量创建Model实例

    1.前言: 将测试数据全部敲入数据库非常繁琐,而且如果与合作伙伴一起开发,部署,那么他们肯定也不想把时间花在一个一个录入数据的繁琐过程中,这时候,创建一个批量录入数据的脚本(population sc ...

  4. 创建一个抽象类动物类以及以下几个接口:进食的接口、睡觉的接口、思考的接口、说话的接口。分别定义猫类、人类、鸟类继承动物类并选择实现上述的接口,并创建实例验证。

    创建一个抽象类动物类以及以下几个接口:进食的接口.睡觉的接口.思考的接口.说话的接口.分别定义猫类.人类.鸟类继承动物类并选择实现上述的接口,并创建实例验证. 上代码 package ThirdDay ...

  5. shell实例第4讲:批量创建用户

    批量创建10个用户 #!/bin/bash #作者:魏波 #时间:2017.02.04USER_FILE=user.txt DATE=$(date +%F_%T)if [ -s $USER_FILE ...

  6. ABAP 创建Rest接口实例

    创建Rest接口 创建类实现接口IF_HTTP_EXTENSION. METHOD if_http_extension~handle_request.DATA(lv_method) = server- ...

  7. [投稿]通过Web界面在多台服务器上批量创建文件

    最近在EDAS产品上发现了一个有意思的功能,能够在Web界面上向多台服务批量下发命令执行,觉得这个功能能够极大的提升效率,因此想分享给其他小伙伴. 这里我以"通过Web界面在多台服务器上批量 ...

  8. 微服务架构之公共模块式中创建API接口统一返回结果ApiResult

    微服务架构之API接口统一返回结果ApiResult 一.创建公共模块common步骤 二.在api中新建一个ApiCode枚举和ApiResult 三.ApiCode与ApiResult编码如下 四 ...

  9. python批量新建文件夹_python批量创建指定名称的文件夹

    本文实例为大家分享了python批量创建指定名称的文件夹具体代码,供大家参考,具体内容如下 继删除多余文件之后,做了一些数据处理,需要重新保存数据,但文件夹的名称又不能改 所以只能创建新的文件夹,换个 ...

最新文章

  1. uos连接服务器共享文件夹,使用UOS系统共享文件给其他设备的的办法
  2. Java 下实现锁无关数据结构--转载
  3. vb.net 机器学习-候选消除法
  4. SKINTOOL 系统不能正常运行
  5. STB 上Linux软件系统解决方案
  6. save()php,PHP DOMDocument save()用法及代码示例
  7. 【技术分享】孙玄:MongoDB在58同城的应用实践
  8. 计算机系统备份教案,系统备份教案.doc
  9. 原生js倒计时插件封装
  10. 关于Kiosk模式修改
  11. 雷电助手连接不到服务器,雷电模拟器无法联网怎么办 雷电模拟器网络异常的解决办法...
  12. ISCSI的target和initiator的部署
  13. 『摄影知识』自然光的应用
  14. 兔子吃狼 引发的人力资源故事
  15. Blender里的三种绑定 (三)骨骼
  16. Word将一个文档模板的样式复制到另外一个文档
  17. 【知识产权基础之专利权】第一章 专利权的客体
  18. JavaScript模拟实现先进先出、先进后出效果
  19. EDA-功能仿真和时序仿真有什么区别?
  20. 浙江大学计算机陈曦博士,浙江大学控制科学与工程学院博士生导师简介:陈曦...

热门文章

  1. vue 分享微信传参_vue实现微信分享链接添加动态参数的方法
  2. 用户表如何区分普通用户和管理员_Gate.io 比特百科:什么是ETH 2.0及普通用户如何参与ETH 2.0质押挖矿...
  3. java递归实现多级菜单栏_vue+ java 实现多级菜单递归效果
  4. android 日期对话框,Android日期选择器对话框DatePickerDialog使用详解
  5. 查看linux系统的sp,查看linux系统版本命令
  6. 服务器ie打不开http协议,在浏览器输入地址后,这个世界发生了什么(http协议浅谈)...
  7. ue4集合类型_UE4项目问题集合
  8. java 远程调试spark_spark开启远程调试
  9. S如何边缘控制_强夯法效果如何?来看看这个检测结果
  10. 5位院士谈科研瓶颈:必须“逼着自己在精神上愿意吃苦”