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

作者:laozhang 时间:2022-11-02 17:44:00 

弹性管理 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()
标签:API,ECS
0
投稿

猜你喜欢

  • mysql数据库重命名语句分享

    2024-01-18 20:05:24
  • SQL Server AlwaysOn读写分离配置图文教程

    2024-01-19 10:20:20
  • Pycharm生成可执行文件.exe的实现方法

    2023-07-19 12:09:54
  • MySQL单表查询常见操作实例总结

    2024-01-20 05:47:17
  • 跟老齐学Python之永远强大的函数

    2021-12-30 19:41:08
  • 如何在Python中进行异常处理

    2021-02-21 06:51:01
  • python re的findall和finditer的区别详解

    2022-05-19 23:04:33
  • oracle 会话 死锁 执行sql 执行job的方法

    2024-01-18 20:24:59
  • SQL 多表连接查询实现语句

    2024-01-16 07:37:24
  • 教你如何用node连接redis的示例代码

    2024-05-03 15:55:15
  • Python脚本处理空格的方法

    2021-03-12 09:45:33
  • mysql or走索引加索引及慢查询的作用

    2024-01-19 10:21:06
  • 以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式

    2023-06-08 12:15:53
  • JSP分页显示的实例代码

    2023-06-26 06:06:37
  • 手把手教你pycharm专业版安装破解教程(linux版)

    2023-03-03 08:58:56
  • 调试Django时打印SQL语句的日志代码实例

    2021-06-09 05:29:42
  • Sql Server里删除数据表中重复记录的例子

    2024-01-19 18:37:31
  • MySQL按小时查询数据,没有的补0

    2024-01-18 00:55:30
  • 常用原生JS兼容性写法汇总

    2024-04-22 22:38:15
  • 浅谈Django中的数据库模型类-models.py(一对一的关系)

    2024-01-24 18:32:11
  • asp之家 网络编程 m.aspxhome.com