云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性释放ECS实例

使用OpenAPI弹性释放ECS实例

云服务器 ECS 的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性地进行自定义资源创建,完成业务计算时释放资源。本篇将提供若干 Tips 帮助您更加便捷地完成云服务器的释放以及弹性设置。

本文将涉及到几个重要功能和相关API:

  • 释放按量付费的云服务器
  • 设置按量付费实例的自动释放时间
  • 停止服务器
  • 查询实例列表

释放后,实例所使用的物理资源将被回收,包括磁盘及快照,相关数据将全部丢失且永久不可恢复。如果您还想继续使用相关的数据,建议您释放云服务器之前一定要对磁盘数据做快照,下次创建 ECS 时可以直接通过快照创建资源。

释放云服务器

释放服务器,首先要求您的服务器处于停止状态。当服务器停止后,若影响到应用,您可以将服务器重新启动。

停止云服务器

停止服务器的指令非常简单,且对于按量付费和包年包月都是一样的。停止云服务器的一个参数是 ForceStop,若属性设置为 true,它将类似于断电,直接停止服务器,但不承诺数据能写到磁盘中。如果仅仅为了释放服务器,这个可以设置为 true。

def stop_instance(instance_id, force_stop=False):
    '''
    stop one ecs instance.
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :param force_stop: if force stop is true, it will force stop the server and not ensure the data
    write to disk correctly.
    :return:
    '''
    request = StopInstanceRequest()
    request.set_InstanceId(instance_id)
    request.set_ForceStop(force_stop)
    logging.info("Stop %s command submit successfully.", instance_id)
    _send_request(request)

释放云服务器

如果您没有停止服务器直接执行释放,可能会有如下报错:

{"RequestId":"3C6DEAB4-7207-411F-9A31-6ADE54C268BE","HostId":"ecs-cn-hangzhou.aliyuncs.com","Code":"IncorrectInstanceStatus","Message":"The current status of the resource does not support this operation."}

当服务器处于Stopped状态时,您可以执行释放服务器。释放服务器的方法比较简单,参数如下:

  • InstanceId: 实例的 ID
  • force: 如果将这个参数设置为 true,将会执行强制释放。即使云服务器不是Stopped状态也可以释放。执行的时候请务必小心,以防错误释放影响您的业务。
python def release_instance(instance_id, force=False): ''' delete instance according instance id, only support after pay instance. :param instance_id: instance id of the ecs instance, like 'i-***'. :param force: if force is false, you need to make the ecs instance stopped, you can execute the delete action. If force is true, you can delete the instance even the instance is running. :return: ''' request = DeleteInstanceRequest(); request.set_InstanceId(instance_id) request.set_Force(force) _send_request(request)

释放云服务器成功的 Response 如下:

{“RequestId”:”689E5813-D150-4664-AF6F-2A27BB4986A3”}

设置云服务器的自动释放时间

为了更加简化对云服务器的管理,您可以自定义云服务器的释放时间。当定时时间到后,阿里云将自动为您完成服务器的释放, 无需手动执行释放。

注意:自动释放时间按照 ISO8601 标准表示,并需要使用 UTC 时间。 格式为:yyyy-MM-ddTHH:mm:ssZ。 如果秒不是 00,则自动取为当前分钟开始时。自动释放的时间范围:当前时间后 30 分钟 ~ 当前时间起 3 年。

def set_instance_auto_release_time(instance_id, time_to_release = None):
    '''
    setting instance auto delete time
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :param time_to_release: if the property is setting, such as '2017-01-30T00:00:00Z'
    it means setting the instance to be release at that time.
    if the property is None, it means cancel the auto delete time.
    :return:
    '''
    request = ModifyInstanceAutoReleaseTimeRequest()
    request.set_InstanceId(instance_id)
    if time_to_release is not None:
        request.set_AutoReleaseTime(time_to_release)
    _send_request(request)

执行 set_instance_auto_release_time(‘i-1111’, ‘2017-01-30T00:00:00Z’) 后完成设置。

执行设置成功后,您可以通过DescribeInstances来查询自动释放的时间设置。

def describe_instance_detail(instance_id):
    '''
    describe instance detail
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :return:
    '''
    request = DescribeInstancesRequest()
    request.set_InstanceIds(json.dumps([instance_id]))
    response = _send_request(request)
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        if len(instance_list) > 0:
            return instance_list[0]
def check_auto_release_time_ready(instance_id):
    detail = describe_instance_detail(instance_id=instance_id)
    if detail is not None:
        release_time = detail.get('AutoReleaseTime')
        return release_time

取消自动释放设置

如果您的业务有变化,需要取消自动释放设置。只需执行命令将自动释放时间设置为空即可。

set_instance_auto_release_time('i-1111')

完整代码如下:

注意:释放云服务器需谨慎。

#  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
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DeleteInstanceRequest import DeleteInstanceRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.ModifyInstanceAutoReleaseTimeRequest import \
    ModifyInstanceAutoReleaseTimeRequest
from aliyunsdkecs.request.v20140526.StopInstanceRequest import StopInstanceRequest
# 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')
def stop_instance(instance_id, force_stop=False):
    '''
    stop one ecs instance.
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :param force_stop: if force stop is true, it will force stop the server and not ensure the data
    write to disk correctly.
    :return:
    '''
    request = StopInstanceRequest()
    request.set_InstanceId(instance_id)
    request.set_ForceStop(force_stop)
    logging.info("Stop %s command submit successfully.", instance_id)
    _send_request(request)
def describe_instance_detail(instance_id):
    '''
    describe instance detail
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :return:
    '''
    request = DescribeInstancesRequest()
    request.set_InstanceIds(json.dumps([instance_id]))
    response = _send_request(request)
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        if len(instance_list) > 0:
            return instance_list[0]
def check_auto_release_time_ready(instance_id):
    detail = describe_instance_detail(instance_id=instance_id)
    if detail is not None:
        release_time = detail.get('AutoReleaseTime')
        return release_time
def release_instance(instance_id, force=False):
    '''
    delete instance according instance id, only support after pay instance.
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :param force:
    if force is false, you need to make the ecs instance stopped, you can
    execute the delete action.
    If force is true, you can delete the instance even the instance is running.
    :return:
    '''
    request = DeleteInstanceRequest();
    request.set_InstanceId(instance_id)
    request.set_Force(force)
    _send_request(request)
def set_instance_auto_release_time(instance_id, time_to_release = None):
    '''
    setting instance auto delete time
    :param instance_id: instance id of the ecs instance, like 'i-***'.
    :param time_to_release: if the property is setting, such as '2017-01-30T00:00:00Z'
    it means setting the instance to be release at that time.
    if the property is None, it means cancel the auto delete time.
    :return:
    '''
    request = ModifyInstanceAutoReleaseTimeRequest()
    request.set_InstanceId(instance_id)
    if time_to_release is not None:
        request.set_AutoReleaseTime(time_to_release)
    _send_request(request)
    release_time = check_auto_release_time_ready(instance_id)
    logging.info("Check instance %s auto release time setting is %s. ", instance_id, release_time)
def _send_request(request):
    '''
    send open api request
    :param request:
    :return:
    '''
    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("Release ecs instance by Aliyun OpenApi!")
    set_instance_auto_release_time('i-1111', '2017-01-28T06:00:00Z')
    # set_instance_auto_release_time('i-1111')
    # stop_instance('i-1111')
    # release_instance('i-1111')
    # release_instance('i-1111', True)

原文链接

时间: 2024-09-20 05:29:19

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

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

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

《玩转ECS云服务器》第一期:走进块存储产品

11月23日,阿里云弹性计算产品经理崆闻在培训上为大家做了<玩转ECS云服务器>系列培训第一期<走进块存储>的分享.在本次分享中,他首先分析了数据类型和业务场景,接着介绍块存储产品的基本特性和选型,最后重点分享了块存储的数据保护技术.多副本技术和快照.下面是本次分享的内容整理,如下.   直播回顾视频   玩转ECS云服务器系列课程,会带您深入了解实例.块存储.镜像等相关ECS子产品的产品特点和基本使用方法,帮助您在上云旅途中迈出坚实的第一步.   云服务器ECS是阿里云提供的一种

阿里云如何部署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电话及互联网服务的专业化移动通信运营公