详情页标题前

阿里云ECS云服务器释放ECS实例-云淘科技

详情页1

云服务器ECS支持按需创建资源。您可以在业务高峰期按需弹性地创建自定义资源,完成业务计算时释放资源。本文介绍如何通过Python SDK释放ECS实例

背景信息

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

本文提供了释放ECS实例的完整代码示例,并提供了代码示例解析,请参见:

  • 停止ECS实例

  • 释放ECS实例

  • 设置ECS实例的自动释放时间

  • 取消自动释放设置

更多代码示例请参见阿里云代码示例库(CodeSample)。

完整代码

本文的完整代码如下所示。

说明

释放ECS实例需谨慎。

#  coding=utf-8
rr# 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 os
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.
# 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式
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(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], '')


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!")
    stop_instance('i-bp1aet7s13lfpjop****')
    # set_instance_auto_release_time('i-bp1187lghfcy8nnz****', '2020-04-17T06:00:00Z')
    # set_instance_auto_release_time('i-bp1aet7s13lfpjop****')
    # release_instance('i-bp1aet7s13lfpjop****')
    # release_instance('i-bp1aet7s13lfpjop****', True)

停止ECS实例

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

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

释放ECS实例

如果您没有停止ECS实例直接执行释放,可能会有如下报错:

{"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."}

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

  • InstanceId:实例的ID。

  • force:如果将这个参数设置为true,将会执行强制释放。即使ECS实例不是Stopped状态也可以释放。执行的时候请务必小心,以防错误释放影响您的业务。

释放ECS实例的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)

释放ECS实例成功的Response如下:

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

设置ECS实例的自动释放时间

为了更加简化对ECS实例的管理,您可以自定义ECS实例的释放时间。到达释放时间时,阿里云将自动为您释放ECS实例,无需手动执行释放。

说明

自动释放时间按照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')

腾讯云1折,限时活动,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:http://www.yunxiaoer.com/153187.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云ECS云服务器DescribeInvocations-云淘科技

    调用DescribeInvocations查询云助手命令的执行列表和状态。 接口说明 当您执行命令后,不代表命令一定成功运行,并且一定有预期的命令效果。您需要通过接口返回值查看实际执行结果,以实际输出结果为准。 您可以查询最近4周的执行信息,执行信息的保留上限为10万条。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。…

    阿里云服务器 2023年12月9日
  • 阿里云RDS数据库自助诊断连接-云淘科技

    本文介绍RDS实例内网和外网连接的自助诊断方法。 背景 当您购买RDS实例后,可能会遇到无法连接实例的问题,大部分情况是因为网络不通。因此,我们提供了连接自助诊断工具,帮助您快速解决这类问题。 应用场景 当您无法连接RDS实例时,可以通过自助诊断工具排查并处理问题。 技术实现 实例连接诊断是检测从连接发起方到RDS实例的整个链路的连通性。例如,如果检测到连接…

    阿里云数据库 2023年12月9日
  • 阿里云ECS云服务器ModifyInstanceVpcAttribute-云淘科技

    调用ModifyInstanceVpcAttribute修改一台专有网络类型ECS实例的专有网络VPC、私网IP地址或虚拟交换机。 接口说明 调用接口时,ECS实例的状态必须是已停止(Stopped)。 当您使用该接口修改实例的私网IP地址或虚拟交换机时,请注意: 新建的ECS实例必须经过重启才能调用该接口。 成功修改一次后,ECS实例必须经过重启才能继续调…

    阿里云服务器 2023年12月9日
  • 阿里云RDS数据库登录临时实例-云淘科技

    您可以创建临时实例(即将实例数据恢复到该临时实例),然后登录到临时实例中确认数据是否正确,最后再将临时实例的数据恢复到目标RDS实例。本文介绍如何登录临时实例。 前提条件 RDS实例需满足以下条件: 大版本:RDS SQL Server 2008 R2 系列:高可用系列 存储类型:本地SSD盘 说明 您可以前往实例基本信息页面查看以上信息。 登录临时实例 所…

    阿里云数据库 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云对象存储OSSPython管理文件访问权限-云淘科技

    本文介绍如何管理文件访问权限。 背景信息 文件的访问权限(ACL)有以下四种: 访问权限 描述 访问权限值 继承Bucket 文件遵循存储空间的访问权限。 oss2.OBJECT_ACL_DEFAULT 私有 文件的拥有者和授权用户有该文件的读写权限,其他用户没有权限操作该文件。 oss2.OBJECT_ACL_PRIVATE 公共读 文件的拥有者和授权用户…

    阿里云对象存储 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。