云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例

使用OpenAPI弹性创建ECS实例

除了可以在ECS控制台或售卖页创建 ECS 外,您还可以使用 OpenAPI 代码来弹性地创建和管理ECS。本页面使用 Python 为例进行说明。

创建 ECS 时需关注以下 API:

  • 创建ECS实例
  • 查询实例列表
  • 启动ECS实例
  • 分配公网IP地址

前提条件

开通按量付费产品,您的账户余额不得少于 100 元,更多的需求参见 ECS使用须知。您需要在阿里云的费用中心确保自己的余额充足。

创建按量云服务器

创建云服务器时的必选属性:

  • SecurityGroupId:安全组 ID。安全组通过防火墙规则实现对一组实例的配置,保护实例的网络出入请求。在设置安全组出入规则时,建议按需开放而不要默认开放所有的出入规则。您也可以通过 ECS 控制台创建安全组。
  • InstanceType:实例规格。参考 ECS 售卖页的选项,界面上 1 核 2GB n1.small则入参为 ecs.n1.small。
  • ImageId:镜像 ID。参考ECS控制台的镜像列表,您可以过滤系统公共镜像或者自定义镜像。

创建云服务器

如下面的代码所示,创建一台经典网络的ECS,使用系统盘ssd,盘参数为cloud_ssd,选择io优化实例optimized。

# create one after pay ecs instance.
def create_after_pay_instance(image_id, instance_type, security_group_id):
    request = CreateInstanceRequest();
    request.set_ImageId(image_id)
    request.set_SecurityGroupId(security_group_id)
    request.set_InstanceType(instance_type)
    request.set_IoOptimized('optimized')
    request.set_SystemDiskCategory('cloud_ssd')
    response = _send_request(request)
    instance_id = response.get('InstanceId')
    logging.info("instance %s created task submit successfully.", instance_id)
    return instance_id;

创建成功后将返回相应的实例 ID,失败的话也会有对应的 ErrorCode。由于参数较多,您可以参考 ECS 的售卖页进行调整。

{"InstanceId":"i-***","RequestId":"006C1303-BAC5-48E5-BCDF-7FD5C2E6395D"}

云服务器生命周期

对于云服务器的状态操作, 请参考云服务器实例生命周期。

只有Stopped状态的实例可以执行 Start 操作。也只有Running状态的 ECS 可以执行Stop操作。查询云服务器的状态可以通过查询实例列表传入 InstanceId 进行过滤。在DescribeInstancesRequest时可以通过传入一个 JSON 数组格式的 String 就可以查询这个资源的状态。查询单个实例的状态建议使用DescribeInstances而不要使用DescribeInstanceAttribute, 因为前者比后者返回更多的属性和内容。

下面的代码会检查实例的状态,只有实例的状态符合入参才会返回实例的详情。

# output the instance owned in current region.
def get_instance_detail_by_id(instance_id, status='Stopped'):
    logging.info("Check instance %s status is %s", instance_id, status)
    request = DescribeInstancesRequest()
    request.set_InstanceIds(json.dumps([instance_id]))
    response = _send_request(request)
    instance_detail = None
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        for item in instance_list:
            if item.get('Status') == status:
                instance_detail = item
                break;
        return instance_detail;

启动云服务器

创建成功后的 ECS 默认状态是Stopped。如果要启动 ECS 实例为Running状态,只需要发送启动指令即可。

def start_instance(instance_id):
    request = StartInstanceRequest()
    request.set_InstanceId(instance_id)
    _send_request(request)

停止云服务器

停止云服务器只需传入instanceId即可。

def stop_instance(instance_id):
    request = StopInstanceRequest()
    request.set_InstanceId(instance_id)
    _send_request(request)

创建时启动“自动启动云服务器”

服务器的启动和停止都是一个异步操作,您可以在脚本创建并同时检测云服务器符合状态时执行相应操作。

创建资源后得到实例ID,首先判断实例是否处于Stopped的状态,如果处于Stopped状态,下发Start服务器的指令,然后等待服务器的状态变成Running。

def check_instance_running(instance_id):
    detail = get_instance_detail_by_id(instance_id=instance_id, status=INSTANCE_RUNNING)
    index = 0
    while detail is None and index < 60:
        detail = get_instance_detail_by_id(instance_id=instance_id);
        time.sleep(10)
    if detail and detail.get('Status') == 'Stopped':
        logging.info("instance %s is stopped now.")
        start_instance(instance_id=instance_id)
        logging.info("start instance %s job submit.")
    detail = get_instance_detail_by_id(instance_id=instance_id, status=INSTANCE_RUNNING)
    while detail is None and index < 60:
        detail = get_instance_detail_by_id(instance_id=instance_id, status=INSTANCE_RUNNING);
        time.sleep(10)
    logging.info("instance %s is running now.", instance_id)
    return instance_id;

分配公网IP

如果在创建云服务器的过程中,指定了公网带宽,若需要公网的访问权限还要调用API来分配公网IP。详情请参考:分配公网 IP 地址。

包年包月的资源创建

除了创建按量服务的云服务器,您的API还支持创建包年包月的服务器。包年包月的创建和官网的创建流程不同,使用的是自动扣费的模式,也就是说您需要在创建服务器之前确保账号有足够的余额或者信用额度,在创建的时候将直接扣费。

和按量付费的 ECS 相比,只需要指定付费类型和时长即可,下面的时长为1个月。

  request.set_Period(1)    request.set_InstanceChargeType(‘PrePaid’)

创建包年包月实例的整体的代码如下:

# create one prepay ecs instance.
def create_prepay_instance(image_id, instance_type, security_group_id):
    request = CreateInstanceRequest();
    request.set_ImageId(image_id)
    request.set_SecurityGroupId(security_group_id)
    request.set_InstanceType(instance_type)
    request.set_IoOptimized('optimized')
    request.set_SystemDiskCategory('cloud_ssd')
    request.set_Period(1)
    request.set_InstanceChargeType('PrePaid')
    response = _send_request(request)
    instance_id = response.get('InstanceId')
    logging.info("instance %s created task submit successfully.", instance_id)
    return instance_id;

完整的代码

完整的代码如下,您可以按照自己的资源参数进行设置。

#  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 2.1.2, 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.CreateInstanceRequest import CreateInstanceRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.StartInstanceRequest import StartInstanceRequest
# configuration the log output formatter, if you want to save the output to file,
# append ",filename='ecs_invoke.log'" after datefmt.
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')
clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-beijing')
IMAGE_ID = 'ubuntu1404_64_40G_cloudinit_20160727.raw'
INSTANCE_TYPE = 'ecs.s2.large'  # 2c4g generation 1
SECURITY_GROUP_ID = 'sg-****'
INSTANCE_RUNNING = 'Running'
def create_instance_action():
    instance_id = create_after_pay_instance(image_id=IMAGE_ID, instance_type=INSTANCE_TYPE,
                                            security_group_id=SECURITY_GROUP_ID)
    check_instance_running(instance_id=instance_id)
def create_prepay_instance_action():
    instance_id = create_prepay_instance(image_id=IMAGE_ID, instance_type=INSTANCE_TYPE,
                                         security_group_id=SECURITY_GROUP_ID)
    check_instance_running(instance_id=instance_id)
# create one after pay ecs instance.
def create_after_pay_instance(image_id, instance_type, security_group_id):
    request = CreateInstanceRequest();
    request.set_ImageId(image_id)
    request.set_SecurityGroupId(security_group_id)
    request.set_InstanceType(instance_type)
    request.set_IoOptimized('optimized')
    request.set_SystemDiskCategory('cloud_ssd')
    response = _send_request(request)
    instance_id = response.get('InstanceId')
    logging.info("instance %s created task submit successfully.", instance_id)
    return instance_id;
# create one prepay ecs instance.
def create_prepay_instance(image_id, instance_type, security_group_id):
    request = CreateInstanceRequest();
    request.set_ImageId(image_id)
    request.set_SecurityGroupId(security_group_id)
    request.set_InstanceType(instance_type)
    request.set_IoOptimized('optimized')
    request.set_SystemDiskCategory('cloud_ssd')
    request.set_Period(1)
    request.set_InstanceChargeType('PrePaid')
    response = _send_request(request)
    instance_id = response.get('InstanceId')
    logging.info("instance %s created task submit successfully.", instance_id)
    return instance_id;
def check_instance_running(instance_id):
    detail = get_instance_detail_by_id(instance_id=instance_id, status=INSTANCE_RUNNING)
    index = 0
    while detail is None and index < 60:
        detail = get_instance_detail_by_id(instance_id=instance_id);
        time.sleep(10)
    if detail and detail.get('Status') == 'Stopped':
        logging.info("instance %s is stopped now.")
        start_instance(instance_id=instance_id)
        logging.info("start instance %s job submit.")
    detail = get_instance_detail_by_id(instance_id=instance_id, status=INSTANCE_RUNNING)
    while detail is None and index < 60:
        detail = get_instance_detail_by_id(instance_id=instance_id, status=INSTANCE_RUNNING);
        time.sleep(10)
    logging.info("instance %s is running now.", instance_id)
    return instance_id;
def start_instance(instance_id):
    request = StartInstanceRequest()
    request.set_InstanceId(instance_id)
    _send_request(request)
# output the instance owned in current region.
def get_instance_detail_by_id(instance_id, status='Stopped'):
    logging.info("Check instance %s status is %s", instance_id, status)
    request = DescribeInstancesRequest()
    request.set_InstanceIds(json.dumps([instance_id]))
    response = _send_request(request)
    instance_detail = None
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        for item in instance_list:
            if item.get('Status') == status:
                instance_detail = item
                break;
        return instance_detail;
# 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__':
    logging.info("Create ECS by OpenApi!")
    create_instance_action()
    # create_prepay_instance_action()

原文链接

时间: 2024-09-17 10:14:42

云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例的相关文章

使用OpenApi弹性创建云服务器ECS

除了可以在ECS控制台或者售卖页创建ECS之外,您可以使用OpenApi代码来弹性的创建和管理ECS.这里使用Python来作例子. 开通按量付费产品,您的账户余额不得少于100元,更多的需求参见ECS 使用须知,您需要在阿里云的费用中心确保自己的余额充足. 创建ECS的有下面几个API需要关注: 创建ECS实例 查询实例列表 启动ECS实例 分配公网 IP 地址 按量的云服务器创建 创建一台云服务器有很多关键参数,下面几个是必选属性: SecurityGroupId: 安全组Id,安全组通过安

专访阿里云雁杨:因需求而进化,ECS云服务器追求弹性极致

近年来随着云计算如火如荼的发展,上云已经成为了所有企业的标配.但在国内鱼龙混杂的云服务市场下,云服务器的选型评估却是长期困扰着企业的难题.基于此,阿里云ECS一直坚持为不同行业及不同企业提供垂直实例产品,提高用户体验,有针对性的解决行业特色问题并且带来最优的性价比.本文中阿里云ECS产品负责人雁杨,将就云服务器的选择.业务迁移上云的经验分享等话题进行深度解答. 雁杨 ECS发展现状解读 和亚马逊一样,阿里云始于电商业务,其整体技术构筑在阿里集团10年的电商业务积淀之上.雁杨表示,作为国内最早对外

阿里云如何部署Linux云服务器实例环境

示例:部署环境 您可以根据业务需要,选择下列任意一种方式部署云服务器 ECS 实例的使用环境: 镜像部署 手动部署 下表列出了两种部署方式的特点.一般推荐镜像部署.如果您需要个性化定制部署,建议使用手动部署. 对比项 镜像部署 手动部署 部署所需时间 3-5分钟,快速部署上云 1-2天.选择适合的操作系统.中间件.数据库.各类软件.插件.脚本,再进行安装和配置 专业性 IOPS 由运维过万级用户的优质服务商提供 依赖开发人员的开发水平 个性化 支持主流应用场景 可满足个性化的部署要求 安全性 经

阿里云服务器是什么

什么是云服务器 ECS 云服务器 ECS (Elastic Compute Service) 是处理能力可弹性伸缩的计算服务,它的管理方式比物理服务器更简单高效.无需提前采购投入,您可以根据业务的需要,随时创建实例.扩容磁盘.或释放任意多台云服务器实例. 云服务器 ECS 实例(以下简称 ECS 实例)是一个虚拟的计算环境,包含 CPU.内存等最基础的计算组件,是云服务器呈献给每个用户的实际操作实体.ECS 实例是云服务器最为核心的概念,其他的资源,比如磁盘.IP.镜像.快照等,只有与 ECS

你所不知道的21个云服务器应用实践———云计算综合入门指南

摘要:如今,基于互联网的服务和交互已经越来越深入我们的生活,"云计算"也成为了不折不扣的高频词汇.并以其快捷.按需调用网络资源的优势为我们的日常生活带来了诸多便利和改变.之前,我们基于云服务器的多种利用方法制作了"云计算的1024种玩法"的零基础入门专题,现在,我们对这一专题进行扩展和整合,制作出了这份云计算综合入门指南.   它分为两个部分,分别是云计算基础和云计算实践.在基础篇中,我们能学习到关于云服务器远程控制搭建,数据管理使用,以及建站环境扩展等工具性内容:

阿里云服务器搭建SVN仓库管理项目

         最近由于个人学习(新手)需要,方便个人项目管理,想利用自己现有的阿里云服务器对项目进行管理,首先根据自己的需要,先使用svn作为目前暂时的管理方法(相对比较简单).个人电脑是win10 64位系统,服务器是阿里云CentOS 7.3 64位.     一.服务器svn环境搭建(服务器使用的是centos7.3 64位系统)            1.安装svn                  yum install subversion             2.查看版本号

个人或是公司如何选择适合自己的云服务器?

近年来,国内云计算的快速发展催动了一个新时代的产生.云计算正不断渗透到各行各业,不管是大型企业还是中小型企业都在争相拥抱云.与此同时,企业内部的IT基础架构正在发生变化,云服务器作为这个时代的产物早已引起人们的关注. 云服务器又叫云计算服务器或云主机.云服务器使用了云计算技术,整合了数据中心三大核心要素:计算.网络与存储.云服务器基于集群服务器技术,虚拟出多个类似独立服务器的部分,具有很高的安全稳定性. 因为云服务器是新时代产物,大多数中小企业对其了解并不深刻,在选择过程中存在很多问题,可能会导

福建移动部署Oracle Exadata云服务器打造新一代经营分析系统

中国移动通信集团福建有限公司(简称福建移动)日前宣布,将通过部署Oracle Exadata数据库云服务器打造新一代经营分析系统(Business Analysis Support System,简称BASS系统),从而进一步支持其全方位发展的需求. 福建移动是中国移动(香港)有限公司的全资子公司,下辖9个市分公司,61个县(市)分公司.目前,福建移动已建成覆盖范围广.业务品种多.通信质量高的综合通信网络,成为经营移动通信业务.IP电话及互联网服务的专业化移动通信运营公司. 在过去十几年中,福建

福建移动部署甲骨文Exadata云服务器

2012年1月31日消息,中国移动通信集团福建有限公司(简称福建移动)日前宣布,将通过部署Oracle Exadata数据库云服务器打造新一代经营分析系统(Business Analysis Support System,简称BASS系统),从而进一步支持其全方位发展的需求. 福建移动是中国移动(香港)有限公司的全资子公司,下辖9个市分公司,61个县(市)分公司.目前,福建移动已建成覆盖范围广.业务品种多.通信质量高的综合通信网络,成为经营移动通信业务.IP电话及互联网服务的专业化移动通信运营公