ECS开放批量创建实例接口RunInstances

为了更方便的实现弹性的资源创建,方便您一次运行多台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 = 0
        while 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 = 0
        for instance_detail in instances_list:
            if instance_detail.get('Status') == "Running":
                running_count += 1
        return running_count

def 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_detail
    except 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 check

import json
import logging
import time

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest

logging.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 = 0
        while 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 = 0
        for instance_detail in instances_list:
            if instance_detail.get('Status') == "Running":
                running_count += 1
        return running_count

def 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_detail
    except 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将简化您的资源创建和运行管理。更多的需求您可以留言或者工单提交对我们的反馈。谢谢!

时间: 2024-08-01 16:18:20

ECS开放批量创建实例接口RunInstances的相关文章

ECS开放批量创建实例OpenAPI RunInstances

信息摘要: 可以单次最多创建100台实例,避免重复调用和创建.发布功能: 可以单次最多创建100台实例,避免重复调用和创建.创建成功后可以自动启动,需要公网访问能力,自动分配公网带宽,需要预约释放可以自动释放.详情参见https://yq.aliyun.com/articles/278822适用客户: 之前使用的使用OpenAPI创建资源的用户都建议换用新的接口产品文档: https://help.aliyun.com/document_detail/63440.html

阿里云创建实例接口参数有哪些

创建实例 描述 创建实例需要通过实名认证.没有通过实名认证的可以前往 阿里云官网 中的 用户中心>会员信息 中进行实名认证. 根据传入参数创建弹性计算实例. 在创建实例时,必须要选择镜像,用来确定新创建实例的系统盘配置.镜像包含操作系统以及应用软件配置,基于镜像创建实例后,实例的系统盘即为此镜像的完全克隆. 一个实例创建时必须指定加入一个安全组.安全组需要预先创建,可通过 创建安全组 接口创建,可以在新创建实例时指定,也可通过 修改实例属性 的接口来完成实例所属安全组变更.在同一个安全组内的实例

批量创建实例的时候遇到ratelimit的问题怎么办

问题描述 写了一个批量建实例的脚本但是遇到似乎是api调用次数限制的问题ERROR:Thisrequestwasrate-limited.(HTTP413)在建第十几个脚本的时候就已经是出现这个错误有木有同样遇到问题的 解决方案 解决方案二:是不是并发连接请求数有限制?api也是python-novaclient自己封装的http协议,是不是eventlet的server有限制?

阿里云如何使用镜像创建实例

阿里云如何使用镜像创建实例 镜像主要用于创建 ECS 实例.您可以根据现有的实例,方便的创建有相同配置环境的实例,从而提高工作效率.操作系统.已经安装的应用程序和数据,都会自动复制到新实例中. 在使用镜像时,需要考虑镜像的条件如下: 所在地域:只能使用本地域的镜像.镜像不能跨地域使用.您可以将镜像复制到目标地域.详情请参见 复制镜像. 操作系统:Linux 还是 Windows 的. 操作系统的位数:32 位还是 64 位. 在购买实例的时候,您可以选择自定义镜像.公共镜像.市场镜像或共享镜像.

实现云计算节点KVM平台上快速部署批量虚拟机实例

CloudStack 是一个开源的具有高可用性及扩展性的云计算平台,支持管理大部分主流的虚拟机管理器,比如 KVM 和 XEN.在 CloudStack 中存在两种存储:主存储为虚拟机实例提供磁盘卷,二级存储提供虚拟机实例的模板,用于安装系统的镜像文件及虚拟机实例的磁盘快照.这两种存储都支持网络连接存储(NAS). 图 0. CloudStack 架构 本文我们将以一台 Linux 主机为例,其上运行 KVM 作为计算节点.同时 SONAS 创建网络共享文件系统(NFS)来为此计算节点存储虚拟机

阿里云技术教程系列-ECS远程连接 Linux 实例

内容提示:阿里云ECS服务器入门教程:步骤 3 远程连接 Linux 实例 根据您本地的操作系统,您可以从 Windows.Linux.Mac OS X 等操作系统连接 Linux 实例.本文介绍常用的连接服务器方式.更全面详细的连接实例方式介绍,请参考 连接 Linux 实例. 云服务器 ECS 实例创建好之后,您可以使用以下任意一种方式连接 ECS 实例: 管理控制台的 远程连接 功能:无论您在创建实例时是否购买了带宽,都可以通过管理控制台的远程连接 功能连接实例,进行管理. 使用远程连接软

自己创建的文件夹-mfc对话框批量创建文件夹和空文件

问题描述 mfc对话框批量创建文件夹和空文件 mfc对话框批量创建文件夹和空文件,创建文件夹和文件,才学mfc,求解答,求案例 解决方案 CreateDirectory API 解决方案二: 创建空文件用CreateFile,再 CloseFile 解决方案三: 可以用windowsAPI,可以用System()执行md命令. 解决方案四: 得到sFolder了,就可以CreateFile来创建. 解决方案五: CreateDirectory/CFile::Open(...)/Close()/C

Flash AS 3.0菜鸟学飞教程:用反射动态创建实例

使用new运算符创建对象或实例时,直接调用了某个具体类的构造函数,而在编写程序时,经常需要动态地创建类的实例,这时可以使用反射来创建实例. 例如,如果仅知道某个实例,而不知道实例对应的类,就可以用反射来创建实例.AS3中的所有类都属于Class类型,例如,MovieClip是一个Class,Bitmap也是一个Class. 例: 1.新建一个Flash文档 2.单击图层第一帧,打开动作面板,输入代码: //动态得到类的构造函数 var classcontructor:Class = MovieC

巧用Excel快速批量创建文件夹

由于工作需要,经常要来创建一些人名的文件夹,一个一个创建非常麻烦,其实我们可以通过Excel来批量创建文件夹. 第一步.首先打开Excel创建一个新的工作表,在表格中的A列输入"md "(后面有个空格),B列输入要创建的文件夹 的路径,C列输入文件夹的名称,这里可以通过手动或者复制粘贴来输入人名. 第二步.在D列输入 "=A1&B1&C1",再拉单元格右下角的锚点,使其下面的表格自动填充. 第三步.创建一 个文本文件,把D列的内容复制到文本文件里,并