如何更加便捷地完成云服务器的释放以及弹性设置

发布时间 - 2018-09-28 00:00:00    点击率:

本文在介绍如何更加便捷地完成云服务器的释放以及弹性设置的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。

弹性释放 ECS 实例

本文将涉及到几个重要功能和相关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状态也可以释放。执行的时候请务必小心,以防错误释放影响您的业务。

释放云服务器的Request如下:

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) youjiankuohaophpcn 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)


# linux  # 云服务器  # 您可以  # 您的  # 设置为  # 几个  # 会有  # 将会  # 基础上  # 为您  # 只需  # 将被 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  如何在阿里云通过域名搭建网站?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  如何用腾讯建站主机快速创建免费网站?  详解Huffman编码算法之Java实现  如何快速生成凡客建站的专业级图册?  jQuery 常见小例汇总  js代码实现下拉菜单【推荐】  js实现点击每个li节点,都弹出其文本值及修改  微信小程序 配置文件详细介绍  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  高端建站如何打造兼具美学与转化的品牌官网?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何在景安服务器上快速搭建个人网站?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  海南网站制作公司有哪些,海口网是哪家的?  如何在云主机上快速搭建网站?  如何在服务器上配置二级域名建站?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  教学论文网站制作软件有哪些,写论文用什么软件 ?  三星、SK海力士获美批准:可向中国出口芯片制造设备  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站制作软件有哪些,制图软件有哪些?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  北京企业网站设计制作公司,北京铁路集团官方网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  EditPlus中的正则表达式实战(6)  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  在线制作视频网站免费,都有哪些好的动漫网站?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  香港服务器如何优化才能显著提升网站加载速度?  lovemo网页版地址 lovemo官网手机登录  如何快速搭建高效简练网站?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  java中使用zxing批量生成二维码立牌  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何快速搭建二级域名独立网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何实现多对多模型关联?(Eloquent教程)  制作公司内部网站有哪些,内网如何建网站?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何利用DOS批处理实现定时关机操作详解  手机网站制作与建设方案,手机网站如何建设?  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel Session怎么存储_Laravel Session驱动配置详解