删除弹性云服务器实例及相关资源
引导式阅读
Python
删除弹性云服务器实例及相关资源
作者
C***
上架时间
2021-06-28 12:01:11

版本说明

本示例基于华为云SDK V2.0版本开发,高版本示例正在开发中。

场景介绍

用户通过调用API可删除1个或多个弹性云服务器实例,并可指定是否同时删除弹性云服务器实例绑定的弹性公网IP和数据盘,帮助用户快速管理弹性云服务器实例,提升业务效率。批量删除弹性云服务器实例时,一次最多可以删除1000个。

前提条件

  • 申请服务:用户已注册华为云账号,进行实名认证,或者是由华为云账号在IAM中创建的用户,是云服务的使用人员,具有独立的身份凭证,详见 统一身份认证服务基本概念
  • 配置环境
    • 1、本示例假定用户已经安装好 Python 3.x, 示例程序在 Python 3.7.3 & Windows 10 的环境下进行了测试。
    • 2、按安装Python SDK的方法安装 Python SDK。
    • 3、获取华为云账号的AK/SK。如果之前没有生成过AK/SK,可登录我的凭证界面,选择“管理访问密钥 » 新增访问密钥”来获取。
    • 4、获取项目和项目ID, 还是在上面的页面中,选择“项目列表”,查找要删除ECS所在的区域对应的项目和项目ID, 复制备用。
    • 5、示例程序将不常变化的AK/SK/项目ID/区域以环境变量的形式存储,分别命名为 HWC_AK/HWC_SK/HWC_PRJ_ID/HWC_REGION, 在获取到以上数值后,请设置以上4个环境变量。
    • 6、要进行测试,还应准备好要删除的 ECS, 在对应的区域,如华北-北京四(cn-north-4)建好1个或多个按需计费的 ECS 备用。

示例代码

按照 API版本选择建议, 弹性云服务器所提供的接口分为ECS接口与OpenStack原生接口,推荐使用ECS接口。对于删除弹性云服务器实例的功能,相对OpenStack原生接口,ECS接口支持批量删除,还多了两个选项,分别代表是否同时删除弹性云服务器实例绑定的弹性公网IP和数据盘。本示例程序使用与 ECS 接口对应的 API 函数完成删除操作,但每次调用只删除 1 个弹性云服务器实例。

主要代码在 example-rm-ecs/python/sdkExample.py 中,截取其中主要部分如下:

# delete server def delete_server(server_id, publicip_type="true", volume_type="true"): data = { "servers": [ { "id": server_id } ], "delete_publicip": publicip_type, "delete_volume": volume_type } ff = conn.ecs.delete_server(**data) print(ff) wait_time(TIMES, INTERVAL, ff.job_id) # wait until job status become SUCCESS or FAIL def wait_time(times, interval, job_id): for index in range(times): time.sleep(interval) job = conn.ecs.get_job(job_id) if job.status == "SUCCESS": print("作业 %s 成功!" % job_id) print(job) return 0 elif job.status == "FAIL": print("作业 %s 失败!" % job_id) print(job) return -1 print("等待作业 %s 结果超时!" % job_id) return -1

运行示例

在命令行下,进入 pom.xml 文件所在目录,运行以下命令将执行 App 类的 main 方法。

# 打包 mvn package # 将依赖包复制到 target/dependency/ 目录下 mvn dependency:copy-dependencies -Dmdep.useRepositoryLayout=false # 执行 App 类的 main 方法,注意在 Linux 下,应将 ';' 更改为 ':' # java -cp "target/sdkExample-1.0-SNAPSHOT.jar;target/dependency/*" cn.eaglesoftware.hwcloud.App # Windows 命令行下 # java -cp "target/sdkExample-1.0-SNAPSHOT.jar:target/dependency/*" cn.eaglesoftware.hwcloud.App # Linux 命令行下 java -cp "target/sdkExample-1.0-SNAPSHOT.jar;target/dependency/*" cn.eaglesoftware.hwcloud.App

运行结果

程序执行过程中,首先会查询环境变量配置的区域下的 ECS, 以列表的形式向用户展现(最多10条,用户可输入 ECS 名称的一部分缩小查询范围),用户输入序号可选择其中的 1 个 ECS, 程序调用删除实例的API,等待删除作业完成后,将删除结果输出到控制台。注意删除操作耗时较长(约几十秒),中间没有输出结果。

-----------------------样例----------------------------------------

请输入 ECS 名称包含的字符串缩小查询范围,直接回车表示查询所有 ECS: 序号 ID 名称 0 a07548d3-c5d1-44e9-8efc-b1c60fe69396 rm-ecs-demo-0001 1 1f822b60-8fe2-460d-9a0c-fa9af8f4e43c rm-ecs-demo-0002 请输入要删除 ECS 的序号(0..1), 无效输入将取消删除操作:1 正在删除 ECS(rm-ecs-demo-0002), ID(1f822b60-8fe2-460d-9a0c-fa9af8f4e43c)... openstack.ecs.v1.server.DeleteServer(servers=[{'id': '1f822b60-8fe2-460d-9a0c-fa9af8f4e43c'}], delete_publicip=true, delete_volume=true, job_id=8aaf9ede7395c6de017458314fce7a9b) 作业 8aaf9ede7395c6de017458314fce7a9b 成功! openstack.ecs.v1.job.Job(id=8aaf9ede7395c6de017458314fce7a9b, job_id=8aaf9ede7395c6de017458314fce7a9b, job_type=deleteVMs, begin_time=2020-09-04T08:17:40.813Z, end_time=2020-09-04T08:18:24.402Z, status=SUCCESS, error_code=None, fail_reason=None, entities={'sub_jobs_total': 1, 'sub_jobs': [{'job_id': '8aaf9ede7395c6de01745831514a7a9e', 'job_type': 'deleteVM', 'begin_time': '2020-09-04T08:17:41.193Z', 'end_time': '2020-09-04T08:18:06.340Z', 'status': 'SUCCESS', 'error_code': None, 'fail_reason': None, 'entities': {'server_id': '1f822b60-8fe2-460d-9a0c-fa9af8f4e43c'}}]})