资讯专栏INFORMATION COLUMN

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

supernavy / 1569人阅读

摘要:摘要为了更方便的实现弹性的资源创建,方便您一次运行多台按量实例来完成应用的开发和部署,我们开放了的批量创建实例接口。直到实例状态变成结束创建流程。自动释放时间按照标准表示,并需要使用时间。

摘要: 为了更方便的实现弹性的资源创建,方便您一次运行多台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将简化您的资源创建和运行管理。
点此查看原文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11320.html

相关文章

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

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

    gplane 评论0 收藏0
  • 阿里云建站产品:虚拟主机,轻量应用服务器,ECS云服务器,模板建站区别

    摘要:我们选择阿里云产品建站的时候,常常面对虚拟主机轻量应用服务器云服务器模板建站不知道如何选择,下面就比较下这几个阿里云建站产品的优势和劣势以及各自适合的用户,以供参考。独享云虚拟主机独享资源,空间超大,不限流量,更高配置,企业建站首选。我们选择阿里云产品建站的时候,常常面对虚拟主机,轻量应用服务器,ECS云服务器,模板建站不知道如何选择,下面就比较下这几个阿里云建站产品的优势和劣势以及各自适合...

    Rindia 评论0 收藏0
  • 中型电商解决方案

    摘要:阿里云服务器支持全球多个地区节点,可支持小型电商的出海业务,云产品随时升级扩容,轻松应对高并发,负载均衡一键搭建方便灵活,实时防攻击。为电商企业保驾护航。       适用于初创电商公司快速搭建平台,例如电商网站/APP/电子商城,能轻松承受约5~30万的日均访问量,支持约300-3000单/天的有效成单量。阿里云服务器ECS支持全球多个地区节点,可支持小型电商的出海业务,云产品随时升级扩容...

    yimo 评论0 收藏0
  • 阿里云异构计算发布:轻量级GPU云服务器实例VGN5i

    摘要:轻量级云服务器如何使用实例的用法与普通弹性计算实例一样便捷,用户可以使用控制台或者方式配置和购买服务。阿里云发布了国内首个公共云上的轻量级GPU异构计算产品——VGN5i实例,该实例打破了传统直通模式的局限,可以提供比单颗物理GPU更细粒度的服务,从而让客户以更低成本、更高弹性开展业务。适用于云游戏、VR/AR、AI推理和DL教学等轻量级GPU计算场景,更细粒度的GPU计算服务。 轻量级GP...

    hufeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<