阿里雲的RDS自帶的監控系統獲取數據不怎么直觀,想要通過API獲取數據通過zabbix顯示,因為網上資料缺乏和其他一些原因,獲取API簽名很困難,但使用阿里雲的SDK可以完美避開獲取簽名的步驟。
阿里雲SDK是什么?
SDK是阿里雲為用戶提供的開發工具,支持JAVA、PHP、C#等幾種不同的語言,這里是用Python寫的。在Python SDK里提供了一些模塊,我們通過調用這些模塊、傳入一些必要的參數可以簡單的實現數據的獲取。
阿里雲的sdk就是很多的庫文件,這里我們只需要兩個庫文件,一個核心庫sdk-core和rds庫sdk-rds。
下載地址:https://github.com/aliyun/aliyun-openapi-python-sdk
進入sdk-rds所在的目錄運行安裝命令:python setup.py install
若出現這個,是setuptools工具沒安裝,下載安裝就可以
import setuptools
ImportError: No module named setuptools
# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz # tar -xvf setuptools-0.6c11.tar.gz # cd setuptools-0.6c11 # python setup.py build # python setup.py install # ls -l /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
再次進入aliyun-python-sdk-rds目錄,執行python setup.py install,同樣進入aliyun-python-sdk-core,執行python setup.py install安裝。
這時我們已經裝好了阿里雲sdk庫環境
在aliyun-python-sdk-rds/aliyunsdkrds/request/v20140815路徑下有大量的sdk-rds api庫文件,我們調用這里的庫文件來查找其需要的參數的設置方法和發送請求。
調用阿里雲的sdk分為三個步驟:
- 創建 AcsClient 實例並初始化;AcsClient即請求rds的實例,包括accesskeyid、accesskeysecret和regionid。
- 創建 API 請求並設置參數;這里的參數是除了公共參數之外所需要的所有參數,在阿里雲文檔上查看:https://help.aliyun.com/document_detail/26279.html?spm=5176.doc26224.6.868.xHBXXo
- 發起請求並打印返回。
舉個例子:
我想查看rds實例的資源使用情況。查看阿里雲文檔得知,其請求參數有兩個:Action :DescribeResourceUsage和DBInstanceId:實例名。
我們進入aliyun-python-sdk-rds/aliyunsdkrds/request/v20140815下的DescribeResourceUsageRequest.py庫查看DBInstanceId的設置方法為set_DBInstanceId。
於是我們創建請求並設置參數set_DBInstanceId:
request = DescribeResourceUsageRequest.DescribeResourceUsageRequest() request.set_DBInstanceId('rm-bpXXXXXXXX')
然后創建rds實例的AcsClient對象。
client = AcsClient( AcesskeyID, AcesskeySecret, regionid)
最后在通過do_action_with_exception發送請求
client.do_action_with_exception(request)
完整代碼如下:
#!/usr/bin/python #encoding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkrds.request.v20140815 import DescribeResourceUsageRequest AcesskeyID = 'XXXXXXXXXXXXX' AcesskeySecret = 'XXXXXXXXXXXXXXXXXX' regionid = ‘XXXXXXXXXXX’ client = AcsClient( AcesskeySecret, regionid) request = DescribeResourceUsageRequest.DescribeResourceUsageRequest() request.set_DBInstanceId('rm-bp1XXXXXXXXXXXXX') response = client.do_action_with_exception(request) print response ~
感謝我們的老司機城管哥的指導!!!
OVER
Mark,以防需要的時候忘記!