详解通过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函数学习笔记
Oct 07 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
TensorFlow数据输入的方法示例
Jun 19 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Python对象转换为json的方法步骤
Apr 25 Python
python代码xml转txt实例
Mar 10 Python
浅析Python迭代器的高级用法
Jul 16 Python
Python 如何测试文件是否存在
Jul 31 Python
python实现简单的三子棋游戏
Apr 28 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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
element-ui多文件上传的实现示例
2019/04/10 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
Python入门篇之列表和元组
2014/10/17 Python
Python的动态重新封装的教程
2015/04/11 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
python读写配置文件操作示例
2019/07/03 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
高三自我鉴定
2013/10/23 职场文书
中专生求职自荐信范文
2013/12/22 职场文书
管理失职检讨书
2015/05/05 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python