关于AWS-EC2实例的State的Name与Code-对实现CMDB信息收集时的影响及处理方法
Posted on 2023-05-09 11:12 520_1351 阅读(32) 评论(0) 编辑 收藏 举报关于对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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!