AWS主机资产管理
接触AWS主机在13年,使用的是AWS的一年免费试用(需绑定双币信用卡),在此之前确已经用过阿里云主机。当时的感觉就是AWS主机没有aliyun入手简单(语言障碍应该也是一部分因素)。在后来的工作中更多的接触到了AWS主机,通过深入了解AWS API相关的东西,发现了AWS相对于aliyun在云产品上的成熟性和灵活性。本篇就结合python poto模块通过AWS API做AWS主机的资产信息统计。
一、创始mysql 资产表
1DROP TABLE IF EXISTS `aws_inventory`;
2CREATE TABLE `aws_inventory` (
3 `id` bigint(20) NOT NULL AUTO_INCREMENT,
4 `instanceid` varchar(128) DEFAULT NULL,
5 `public_ip` varchar(32) DEFAULT NULL,
6 `private_ip` varchar(32) DEFAULT NULL,
7 `instance_type` varchar(32) DEFAULT NULL,
8 `region` varchar(128) DEFAULT NULL,
9 `state` varchar(32) DEFAULT NULL,
10 `key_name` varchar(128) DEFAULT NULL,
11 `public_dns_name` varchar(255) DEFAULT NULL,
12 `placement` varchar(128) DEFAULT NULL,
13 `architecture` varchar(32) DEFAULT NULL,
14 PRIMARY KEY (`id`),
15 UNIQUE KEY `uniqueid` (`id`)
16);
二、python 资产统计入库脚本
下面以ec2主机为例,统计某账户下的所有主机资产信息
1#!/usr/bin/python
2import boto.ec2
3import MySQLdb
4regions = [ 'us-east-1','eu-west-1', 'us-west-1','us-west-2','ap-northeast-1','ap-southeast-1','ap-southeast-2']
5inventory = []
6for region in regions:
7 conn = boto.ec2.connect_to_region(region)
8 reserved_instances = conn.get_all_instances()
9 instances = []
10 for r_instance in reserved_instances:
11 for instance in r_instance.instances:
12 instances.append(instance)
13 for i in instances:
14 host_info = map(str,[i.id, i.ip_address,i.private_ip_address, i.instance_type,
15 i.region.name, i.state, i.key_name, i.public_dns_name, i.placement,
16 i.architecture])
17 inventory.append(host_info)
18mysql_conn = MySQLdb.connect(host='localhost', port=3306, user='root', passwd='361way.com',db = 'sysmanager')
19db_cursor = mysql_conn.cursor()
20db_cursor.execute('truncate aws_inventory')
21db_cursor.executemany('insert into aws_inventory (instanceid, public_ip, private_ip, instance_type,
22 region, state, key_name,public_dns_name, placement, architecture )values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)', inventory)
23mysql_conn.commit()
下面针对上面的部分代码进行下分析
第4行中的区域缩写意思如下(具体可以参看AWS文档页面):
Code | Name |
---|---|
ap-northeast-1 | Asia Pacific (Tokyo) Region |
ap-southeast-1 | Asia Pacific (Singapore) Region |
ap-southeast-2 | Asia Pacific (Sydney) Region |
eu-west-1 | EU (Ireland) Region |
sa-east-1 | South America (Sao Paulo) Region |
us-east-1 | US East (Northern Virginia) Region |
us-west-1 | US West (Northern California) Region |
us-west-2 | US West (Oregon) Region |
第7行中,并没有配置aws_access_key_id和aws_secret_access_key 。根据boto插件的用法,应该写成如下方式才可正确连接:
1>>> import boto.ec2
2>>> conn = boto.ec2.connect_to_region("us-west-2",
3... aws_access_key_id='<aws access key>',
4... aws_secret_access_key='<aws secret key>')
不过也可以不加这两个配置,通过环境变量的配置同样可以正常调用AWS主机信息。在linux上可以按下面三个位置任一处配置即可:
1/etc/boto.cfg - for site-wide settings that all users on this machine will use
2~/.boto - for user-specific settings
3~/.aws/credentials - for credentials shared between SDKs
此处的配置方法,可以参看boto github上的示例 。配置文件的内容按如下配置书写:
1[Credentials]
2aws_access_key_id = <your_access_key_here>
3aws_secret_access_key = <your_secret_key_here>
有多个KEY或需要使用代理进行API调用时,github上也有相应的示例,可以具体按示例进行配置。
第5-17行,是通过boto模块内的一些函数遍历出所有示例信息,这部分具体可以查看readthedocs文档和pythonboto文档。
第18-23行,是入库部分。
三、总结
boto模块,这现了对ec2、s3、rds、elb、ebs 等相关应用的封装,这里只用到了其中很小的一部分功能。而在实际进行资产管理中,如zabbix平台本身就集成了资产统计功能。这里只是提供了另一种资产统计的思路。在以AWS主机为主的企业里,可以通过执行这样的python脚本将主机信息入库,也可以再进行深一步的拓展为自己的信息化平台。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-boto-aws-inventory/3672.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.