+86 13541016684Mon. - Fri. 10:00-22:00

通过aws 检查所有region下的是否有资源

aws 检查所有region下的是否有资源

通过aws 检查所有region下的是否有资源

当管理有多个aws账号,每个账号下都开了不同的资源,主要是方便公司内部费用划分方便,有时也常因业务调整,会清除某个账号下所有资源的情况,之前 我手工操作的时候很是麻烦,因为每个账号下涉及的资源太多,时间久了,每个账号下都有什么资源,都分布在那些region,对一些不活跃的账号有时管理员 也需要去查,所以在手工清除的时候我基本都要在控制台上切来切去,每个region都要检查是否已经关闭了实例,卷是否都删除了,AMI和快照是否删除, 最后还要看是否释放了所有EIP等,这种操作在页面上操作操作过的人都知道,是非常痛苦的,因为很有可能部分资源会漏检查,如果漏了是就比较麻烦的,因为 亚马逊是还要收费的,如果你把账单给老板看,老板肺都会被你气炸的,就等着拍桌子,去交工牌吧,呵呵,所以呢,作为亚马逊平台管理员的责任是很重大的,因 为亚马逊是按小时计费的,如果业务已经决定不用了,就要立即关闭使用,避免产生不必要的费用,这就要求aws管理员必须要认证细致,并具有极高的责任心, 就因为有这些痛苦,为避免这种情况发生或使之降低到0.1%, 我的这篇文章就应声而出了,为了简化咱们aws管理员操作的,我写了个脚本,可以自动检测每个region下是否还有资源,如果有就提示,你可以手动登录 平台进行清除,如果没有就告知没有任何资源了,你可以放心的连这个region都不用去看了,全部代码如下,基本思路是循环检查每个region下的实 例,EIP,卷,快照,如果有任何资源存在就提示存在,否则提示在这个region下没有资源,以下是代码:

import boto
from boto import ec2
from boto.exception import EC2ResponseError

try:
conn = ec2.connect_to_region(‘ap-southeast-1′)
regions = conn.get_all_regions()
except EC2ResponseError as e:
print str(e)

for reg in regions:
conn = ec2.connect_to_region(reg.name)
ins = conn.get_only_instances()
add = conn.get_all_addresses()
vol = conn.get_all_volumes()
image = conn.get_all_images()
snap = conn.get_all_snapshots()
if ins:
print ‘This %s  no clean, do it now!’ % reg
elif add:
print ‘This %S have address no clean’  %reg
elif vol:
print ‘This %s have volumes’ % reg
elif image:
print ‘This %s have images’ % reg
elif snap:
print ‘This %s have snapshots’ % reg
else:
print ‘%s have no resource’ % reg

 

代码的基本思路已经说了,都是基本的api调用,没有涉及高深的内容,写完这个脚本,本来想写一个自动删除某个账号下的所有资源,但我觉得可能对各位看官 用处不大,而且 自动删除账号下所有资源的脚本杀伤力还是比较大, 如果误操作基本对公司来说是灾难性的的毁灭,所以这种核武器不造为好,毕竟每个公司每个业务都不同,要做实际删除的时候,还是最后看一下比较好,这是我个 人的操作习惯,其实运维做久了,每个人都有自己的经验,今天这篇文章就到这里了,希望对大家有所帮助。