详解通过API管理或定制开发ECS实例


Posted in Python onSeptember 30, 2018

弹性管理 ECS 实例

获取 RAM 子账号 AK 密钥

使用API管理ECS实例,您需要能访问ECS资源的API密钥(AccessKey ID 和 AccessKey Secret)。为了保证云服务的安全,您需要创建一个能访问ECS资源的RAM用户,获取该用户的AccessKey密钥,并使用这个RAM用户和API管理ECS实例。

以下是获取RAM用户AccessKey密钥的操作步骤:

创建RAM用户并获取AccessKey密钥。

直接给RAM用户授权,授予RAM用户 管理云服务器服务(ECS)的权限。

安装 ECS Python SDK

首先确保您已经具备Python的Runtime,本文中使用的Python版本为2.7+。

pip install aliyun-python-sdk-ecs

如果提示您没有权限,请切换sudo继续执行。

sudo pip install aliyun-python-sdk-ecs

本文使用的SDK版本为 2.1.2。

Hello Alibaba Cloud

创建文件 hello_ecs_api.py。为了使用SDK,首先实例化AcsClient对象,这里需要RAM用户的AccessKey ID和AccessKey Secret。

AccessKey ID和AccessKey Secret是RAM用户访问阿里云ECS服务API的密钥,具有该账户完全的权限,请妥善保管。

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-beijing')

完成实例化后可以进行第一个应用的开发。查询当前账号支持的地域列表。具体的文档参见 查询可用地域列表。

def hello_aliyun_regions():
  request = DescribeRegionsRequest()
  response = _send_request(request)
  region_list = response.get('Regions').get('Region')
  assert response is not None
  assert region_list is not None
  result = map(_print_region_id, region_list)
  logging.info("region list: %s", result)
def _print_region_id(item):
  region_id = item.get("RegionId")
  return region_id
def _send_request(request):
  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)
hello_aliyun_regions()

在命令行运行 python hello_ecs_api.py 会得到当前支持的 Region列表。类似的输出如下:

[u'cn-shenzhen', u'ap-southeast-1', u'cn-qingdao', u'cn-beijing', u'cn-shanghai', 
u'us-east-1', u'cn-hongkong', u'me-east-1', u'ap-southeast-2', u'cn-hangzhou', u'eu-central-1',
 u'ap-northeast-1', u'us-west-1']

查询当前的 Region 下的 ECS 实例列表

查询实例列表和查询 Region 列表非常类似,替换入参对象为DescribeInstancesRequest 即可,更多的查询参数参考 查询实例列表。

def list_instances():
  request = DescribeInstancesRequest()
  response = _send_request(request)
  if response is not None:
    instance_list = response.get('Instances').get('Instance')
    result = map(_print_instance_id, instance_list)
    logging.info("current region include instance %s", result)
def _print_instance_id(item):
  instance_id = item.get('InstanceId');
  return instance_id

输出结果为如下:

current region include instance [u'i-****', u'i-****'']

更多的API参考 ECS API 概览,您可以尝试作一个 查询磁盘列表,将实例的参数替换为 DescribeDisksRequest。

完整代码示例

以上操作完整的代码示例如下所示。

# 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.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# 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')
# sample api to list aliyun open api.
def hello_aliyun_regions():
  request = DescribeRegionsRequest()
  response = _send_request(request)
  if response is not None:
    region_list = response.get('Regions').get('Region')
    assert response is not None
    assert region_list is not None
    result = map(_print_region_id, region_list)
    logging.info("region list: %s", result)
# output the instance owned in current region.
def list_instances():
  request = DescribeInstancesRequest()
  response = _send_request(request)
  if response is not None:
    instance_list = response.get('Instances').get('Instance')
    result = map(_print_instance_id, instance_list)
    logging.info("current region include instance %s", result)
def _print_instance_id(item):
  instance_id = item.get('InstanceId');
  return instance_id
def _print_region_id(item):
  region_id = item.get("RegionId")
  return region_id
# send open api request
def _send_request(request):
  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("Hello Aliyun OpenApi!")
  hello_aliyun_regions()
  list_instances()
Python 相关文章推荐
python解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
使用python加密自己的密码
Aug 04 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
python 构造三维全零数组的方法
Nov 12 Python
python占位符输入方式实例
May 27 Python
Python模块的制作方法实例分析
Dec 21 Python
Pytorch之Variable的用法
Dec 31 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
PyTorch device与cuda.device用法
Apr 03 Python
Python 使用类写装饰器的小技巧
Sep 30 #Python
浅谈django三种缓存模式的使用及注意点
Sep 30 #Python
使用Python实现租车计费系统的两种方法
Sep 29 #Python
Python实现App自动签到领取积分功能
Sep 29 #Python
10个Python小技巧你值得拥有
Sep 29 #Python
实例分析python3实现并发访问水平切分表
Sep 29 #Python
3个用于数据科学的顶级Python库
Sep 29 #Python
You might like
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
php笔记之:AOP的应用
2013/04/24 PHP
php fread读取文件注意事项
2016/09/24 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
jQuery中$.click()无效问题分析
2015/01/29 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
Python的垃圾回收机制深入分析
2014/07/16 Python
django中的setting最佳配置小结
2017/11/21 Python
Python实现的栈(Stack)
2018/01/26 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python生成带有表格的图片实例
2019/02/03 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
婚假请假条怎么写
2014/04/10 职场文书
《火烧云》教学反思
2014/04/12 职场文书
公司离职证明标准范本
2014/10/05 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
JS 基本概念详细介绍
2021/10/16 Javascript
Golang流模式之grpc的四种数据流
2022/04/13 Golang
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技