首頁 > 運維 > linux運維 > 如何透過 API 管理或自訂開發 ECS 實例

如何透過 API 管理或自訂開發 ECS 實例

坏嘻嘻
發布: 2018-09-30 13:56:22
轉載
2285 人瀏覽過

這篇文章帶給大家的內容是關於如何透過 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()
登入後複製

以上是如何透過 API 管理或自訂開發 ECS 實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:aliyun.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板