本篇文章給大家帶來的內容是關于如何通過 api 管理或定制開發 ecs 實例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
彈性管理 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()