720
windows
雲服務器 ECS 使用OpenAPI管理ECS:使用OpenAPI彈性管理ECS實例
您除了可以通過 ECS 管理控製台 創建或管理 ECS 實例外,您也能通過 OpenAPI 管理或定製開發 ECS 實例。
阿裏雲提供了 SDK 來包裝 OpenAPI,將雲服務器 ECS 的管理集成到已有係統中。本文基於 Python 的開發來說明如何通過 OpenAPI 管理 ECS 實例。如果您沒有 Python 開發經驗,也能通過本文完成雲服務的開發。
獲取 RAM 子賬號 AK 密鑰
使用 OpenAPI 管理 ECS 實例,您需要能訪問 ECS 資源的 API 密鑰(Access Key ID 和 Access Key Secret)。為了保證雲服務的安全,您需要創建一個能訪問 ECS 資源的 RAM 子賬號,獲取該子賬號的 AK 密鑰,並使用這個 RAM 子賬號和 OpenAPI 管理 ECS 實例。
以下是獲取 RAM 子賬號 AK 密鑰的操作步驟:
- 創建 RAM 用戶並獲取 AK 密鑰。
- 直接給 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 和 Accesskey Secret。
Access Key ID 和 Access Key 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 Secret', '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 Secret', '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()
最後更新:2017-08-15 14:33:10
上一篇:
阿裏雲幸運券為什麼用不了?
下一篇:
微信眾籌服務係統開發
C# URL帶中文參數的解決辦法
你的微信朋友圈變味了!
撿到iPhone7怎麼解鎖?蘋果6iphone已停用連接itunes要怎麼解決?
"0x00a1bdb3" 指令引用的 "0x00000001" 內存。該內存不能為 "read"。
squirrel-foundation狀態機的使用細節
陳喬恩版東方不敗出爐 全方位對比各版教主
VIM 複製多行
[LeetCode]18.4Sum
DirectSound中關於IID_IDirectSound無法解析的問題
政府安全資訊精選 2017年第十二期 中國網絡安全漏洞披露平均效率遠超美國; 美國美國國土安全部發布指令,要求聯邦機構強化Web和電子郵件安全