美文网首页Python/Go
python 阿里云ecs接口

python 阿里云ecs接口

作者: 路破格 | 来源:发表于2020-04-26 09:25 被阅读0次

安装sdk依赖包

pip install aliyun-python-sdk-core

阿里云通用接口函数

apiyun_api.py

#-*- coding=utf-8 -*-
#-*- encoding:utf-8 -*-

import sys
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

default_encoding = "utf-8"
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)

def get_product_info(product = ""):
    if product == "ecs":
        return {'product_url': "ecs.aliyuncs.com",
                'product_version': "2014-05-26"}
    elif product == "vpc":
        return {'product_url': "vpc.aliyuncs.com",
                'product_version': "2016-04-28"}
    elif product == "rds":
        return {'product_url': "rds.aliyuncs.com",
                'product_version': "2014-08-15"}
    elif product == "slb":
        return {'product_url': "slb.aliyuncs.com",
                'product_version': "2014-05-15"}
    elif product == "redis":
        return {'product_url': "r-kvstore.aliyuncs.com",
                'product_version': "2015-01-01"}
    elif product == "mongodb":
        return {'product_url': "mongodb.aliyuncs.com",
                'product_version': "2015-12-01"}
    elif product == "dns":
        return {'product_url': "alidns.aliyuncs.com",
                'product_version': "2015-01-09"}
    elif product == "domain":
        return {'product_url': "domain.aliyuncs.com",
                'product_version': "2018-01-29"}
    elif product == "business":
        return {'product_url': "business.aliyuncs.com",
                'product_version': "2017-12-14"}
    elif product == "metrics":
        return {'product_url': "metrics.aliyuncs.com",
                'product_version': "2019-01-01"}
    else:
        return False   

def request_aliyun_api(
        accesskeyid = "", 
        accesskeysecret = "",
        action_name = "", 
        product = "", 
        query_params = {}):

    product_info = get_product_info(product)

    if product_info:
        client = AcsClient(accesskeyid, accesskeysecret)
        request = CommonRequest()
        request.set_accept_format('json')
        request.set_method('POST')
        request.set_domain(product_info['product_url'])
        request.set_version(product_info['product_version'])

        for k, v in query_params.items():
            request.add_query_param(k, v)

        request.set_action_name(action_name)
        api_count(product, action_name)
        response = json.loads(
            client.do_action_with_exception(request), 
            encoding = "utf-8"
        )
        return response
    else:
        return False

获取ecs配置信息

get_aliyun_ecs_info.py

#-*- coding=utf-8 -*-
#-*- encoding:utf-8 -*-

import sys
import traceback
from aliyun_api import *

default_encoding = "utf-8"
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)

def get_aliyun_regions(accesskeyid, accesskeysecret):
    reginos = {}
    rs = request_aliyun_api(
        accesskeyid,
        accesskeysecret,
        action_name = "DescribeRegions",
        product = "ecs",
        query_params = {
            "PageNumber": "1",
            "PageSize": "50"
        }
    )

    for region in rs['Regions']['Region']:
        reginos[region['RegionId']] = region['LocalName']

    return regions        

def get_aliyun_ecs_hosts(accesskeyid, accesskeysecret):
    regions = get_aliyun_regions(accesskeyid, accesskeysecret)
    
    for region in regions.keys():
        page_count = 99
        real_page_count = 1

        for count in range(1, page_count):
            rs = request_aliyun_api(
                accesskeyid, 
                accesskeysecret, 
                action_name = "DescribeInstances",
                product = "ecs", 
                query_params = {
                    'RegionId': region,
                    'PageSize': '50',
                    'PageNumber': count
                }
            )

            if count == 1:
                if rs['TotalCount'] == 0:
                    break
                else:
                    real_page_count = rs['TotalCount'] / 50 + 1

            for host in rs['Instances']['Instance']:
                # 可以自定义处理
                print(region, host)

            if count == real_page_count:
                break  

if __name__ == "__main__":
    try:
        # 下面两个参数需要修改
        accesskeyid = "{yourid}"
        accesskeysecret = "{yourkey}"

        get_aliyun_ecs_hosts(accesskeyid, accesskeysecret)
    except Exception as e:
        traceback.print_exc()

参考文档:https://help.aliyun.com/document_detail/25484.html?spm=a2c4g.11174283.6.1209.1bf852feCQRpdd

相关文章

网友评论

    本文标题:python 阿里云ecs接口

    本文链接:https://www.haomeiwen.com/subject/georwhtx.html