博客园  :: 首页  :: 管理

关于对EC2相关信息的查询,我们可以通过EC2.Client.describe_instances(**kwargs)这个API实现

然后将其信息,整理输出到Excel表格,形成CMDB资源信息表格

但笔者在代码完成后,遇到有的实例无法输出如 PrivateIpAddress 等相关的信息

最后通过debug调试才发现,非常巧合的一件事,就是那个实例在代码的执行阶段被终止/删除了

因此在对其json输出的字典中,获取如 PrivateIpAddress 信息时,就会有异常,代码在实现时,是理解的每一个实例都会有PrivateIpAddress这个字段的

所以代码异常的最根本的原因就是那台实例的状态为 terminated ,在Console web界面上显示的是 Terminated

然后笔者去查询了一下,关于实例的State的Name名称与Code的说明,如下:

即是说State 的 Name名称 目前一共有  pending | running | shutting-down | terminated | stopping | stopped

因为 terminated 状态的机器,一般是已经执行过终止了,对于当前的主机清单,那就可以忽略这些机器了,于是笔者采用了break的机制

for Reservation in EC2Response['Reservations']:
    OwnerId=Reservation['OwnerId']
    for Instance in Reservation['Instances']:
        InstanceId=Instance['InstanceId']
        State=Instance['State']['Name']
        if State=="terminated":
            break

这样,再遇到上面的情况、代码执行就不会有异常了,对于状态正常的实例,信息一样的正常采集 ~

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17384318.html