使用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状态也可以释放,所以执行的时候务必小心,以防错误释放影响您的业务。
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,则自动取为当前分钟开始时。最少在当前时间之后半小时;最多不能超过当前时间起三年。

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-17 08:40:50

使用OpenApi弹性释放和设置云服务器ECS释放的相关文章

云服务器ECS资源查询的正确姿势

基础概念 1.地域可用区概念 地域是指物理的数据中心. 可用区是指在同一地域内,电力和网络互相独立的物理区域.官网详解 2.产品概念:产品基本形态由四部分组成,<计费方式, 规格与IO优化,网络类型, 磁盘类型> (1) 计费方式:目前主要有 包年/包月/包周.按量付费.竞价实例 三种. (2) 规格与IO优化:ECS 实例规格定义了实例的 CPU 和内存的配置(包括 CPU 型号.主频等)这两个基本属性,目前新售卖的规格,都是默认IO优化 (3) 网络类型: 目前主要分为经典网路与专有网络,

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

使用OpenAPI弹性释放ECS实例 云服务器 ECS 的一个重要特性就是按需创建资源.您可以在业务高峰期按需弹性地进行自定义资源创建,完成业务计算时释放资源.本篇将提供若干 Tips 帮助您更加便捷地完成云服务器的释放以及弹性设置. 本文将涉及到几个重要功能和相关API: 释放按量付费的云服务器 设置按量付费实例的自动释放时间 停止服务器 查询实例列表 释放后,实例所使用的物理资源将被回收,包括磁盘及快照,相关数据将全部丢失且永久不可恢复.如果您还想继续使用相关的数据,建议您释放云服务器之前一

使用OpenApi弹性管理云服务器ECS

阿里云的云服务器ECS除了提供控制台来进行日常的管理和资源创建,还提供了OpenApi来进行资源的管理和定制开发.通过OpenApi您可以更加灵活的管理和配置云服务器. 阿里云提供了SDK来包装OpenApi,可以让您将云服务器的管理集成到您的已有系统中.本文以Python的开发来说明OpenApi如何来管理云服务器,即便您没有Python的开发经验,通过本文也可以轻松的0基础入门进行云服务的开发.其它语言的开发和管理您可以通过留言沟通. 安装ECS Python SDK 首先确保您已经具备Py

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

使用OpenAPI弹性管理ECS实例 您除了可以通过 ECS 管理控制台 创建或管理 ECS 实例外,您也能通过 OpenAPI 管理或定制开发 ECS 实例. 阿里云提供了 SDK 来包装 OpenAPI,将云服务器 ECS 的管理集成到已有系统中.本文基于 Python 的开发来说明如何通过 OpenAPI 管理 ECS 实例.如果您没有 Python 开发经验,也能通过本文完成云服务的开发. 获取 RAM 子账号 AK 密钥 使用 OpenAPI 管理 ECS 实例,您需要能访问 ECS

云服务器 ECS弹性变配能力总览

云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,充分的助您降低 IT 成本,提升运维效率,使您更专注于自己核心业务创新.它的一个重要优势就是弹性计算,可以在数分钟内创建数千台的云服务器来应对您的业务压力,方便您根据自己的业务的需求从水平和垂直两个维度进行管理. 下面我们将着重介绍下目前云服务器的弹性能力,也许有您所不知道但是非常期望的功能已经悄悄上线了. 云服务ECS目前的付费方式主要分为两类,预付费和后付费.云服务器的目前主要包含下面三个组件: 实

云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI续费

使用OpenAPI续费 除了通过 ECS控制台 或 售卖页 进行云服务器续费外,阿里云还支持直接通过 API 进行续费查询和续费管理. 本文主要涉及如下关键功能: 按照过期时间查询云服务器 续费实例 查询云服务器自动续费时间 设置云服务器自动续费时间 对于包年包月的云服务器,生命周期非常重要.如果云服务器资源不能按时续费,将可能导致服务器被锁定甚至被释放,从而影响业务持续性.API 帮助您及时了解和检查资源的到期时间,并完成续费充值功能. 本篇需关注如下 API: 查询实例列表 续费实例 查询指

云服务器 ECS 建站教程:部署Ghost博客(CentOS 7)

部署Ghost博客(CentOS 7) Ghost是一个免费的开源博客平台,使用JavaScript编写,基于Node.js,旨在简化个人博客和在线出版物的在线发布过程. 此外,将来随着业务的扩展,您可以利用阿里云强大的产品平台,平滑地横向和纵向扩展服务容量,例如: 扩展单个 ECS 实例的 CPU 和内存规格,增强服务器的处理能力. 增加多台 ECS 实例,并利用负载均衡,在多个实例中进行负载的均衡分配. 利用弹性伸缩(Auto Scaling),根据业务量自动增加或减少 ECS 实例的数量.

云服务器 ECS 学习笔记

云服务器 ECS 云服务器 Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务 阿里云专有网络: 在阿里云专有网络之上,可以产生更多的业务可能性. 阿里云专有网络更加稳定和安全. 纵向的弹性,即单个服务器的配置变更 对于阿里云的弹性而言,是计算的弹性.存储的弹性.网络的弹性以及您对于业务架构重新规划的弹性 实例规格族,根据业务场景可分为: 面向通用计算场景的实例规格族 面向内存优化场景的实例规格族 面向计算优化场景的实例规格族 面向存储优化场景的实例规格族

云服务器 ECS 建站教程:手工部署Java Web项目

手工部署Java Web项目 Tomcat 一个开源的且免费的 Java Web 服务器,常用来作为 web 开发的工具.它可以托管由 servlet,JSP 页面(动态内容),HTML 页面,javascript,样式表,图像(静态内容)组成的 Java Web 应用程序. 此外,将来随着业务的扩展,您可以利用阿里云强大的产品平台,平滑地横向和纵向扩展服务容量,例如: 扩展单个 ECS 实例的 CPU 和内存规格,增强服务器的处理能力. 增加多台 ECS 实例,并利用负载均衡,在多个实例中进行