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

本文涉及的产品
云服务器ECS,u1 2核4GB 1个月
推荐场景:
2048小游戏搭建
云服务器 ECS,每月免费额度280元 3个月
简介: 为了更方便的实现弹性的资源创建,方便您一次运行多台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 = 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将简化您的资源创建和运行管理。更多的需求您可以留言或者工单提交对我们的反馈。谢谢!

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 弹性计算 运维
阿里云 ECS 主机的创建 | 学习笔记
快速学习阿里云 ECS 主机的创建
404 0
阿里云 ECS 主机的创建 | 学习笔记
|
弹性计算 Linux 网络安全
ECS 创建|学习笔记
快速学习 ECS 创建
1135 0
ECS 创建|学习笔记
|
弹性计算 关系型数据库 MySQL
|
弹性计算 安全 Java
ecs学生算力使用举例——创建自己的mc服务器
使用阿里云赠送的学生服务器,创建纯净服。
261 0
ecs学生算力使用举例——创建自己的mc服务器
|
弹性计算 网络安全
阿里云专有宿主机创建的ECS实例和云服务器ECS有什么区别?
阿里云专有宿主机具有物理资源独享、配置灵活及性价比高的特性。专有宿主机是单租户独享物理资源,在宿主机上创建的ECS云服务器,大体上和云服务器ECS差不多,均支持划分专有网络VPC连接、挂载云盘和设置故障迁移。
399 0
阿里云专有宿主机创建的ECS实例和云服务器ECS有什么区别?
|
弹性计算 数据中心
新加坡ap-southeast-1创建ECS与查询时region不一致的BUG
实习用terraform做锤子时偶然碰见,简单来说是:创建ECS时region需要写为ap-southeast-1;而查询时region应该写为all并指定region ID,或将region改为ap-southeast,否则会返回无效信息。 目前,初步认为是IP限制导致的
新加坡ap-southeast-1创建ECS与查询时region不一致的BUG
|
弹性计算 JSON 网络安全
初次体验阿里云创建ECS实例
因为有对云的需求,据说阿里云是比较符合国人的习惯,所以决定使用阿里云来进行初体验,有了解到阿里云有一个学生的免费使用ECS的活动,因此就申请了,在一段时间的使用下,我觉得用ECS来创建用户比较方便,并且可以给用户进行精准授权,同时也可以切换到新创建的用户进行登录,切换也是很方便,阿里云提供了一个RAM用户登录的界面,直接输入用户名和密码就可以。我认为阿里云的搜索框做的也很全面,可以在搜索框中搜索到与自己搜索的名词对应的或者相关的功能以及各个领域的相关文件,也会有对你想要了解的东西进行描述,只要在搜索框中搜索你想要的,一定能搜到相关信息。阿里云的控制台把所有的功能模块都列出,界面清晰明了。
|
弹性计算 JSON 容灾
【ECS】使用弹性供应组API批量创建ECS实例
在需要大批量创建按量付费实例的场景中,通过API完成创建操作更加高效。其中,使用RunInstances完成该需求较为复杂,本文将推荐您使用交付过程更加方便稳定的CreateAutoProvisioningGroup。
240 0
【ECS】使用弹性供应组API批量创建ECS实例
|
弹性计算 监控 安全
Day3 在云服务器上创建自己的微信公众号管理系统
Day3 在云服务器上创建自己的微信公众号管理系统
197 0
Day3 在云服务器上创建自己的微信公众号管理系统
在服务器上管理微信小程序最方便的就是使用微擎系统了,很高效,而且也很简洁。
206 0
Day3 在云服务器上创建自己的微信公众号管理系统
相关产品
云服务器 ECS
推荐文章
更多