【问题标题】:Boto issues listing AWS instances with no-tagsBoto 问题列出了没有标签的 AWS 实例
【发布时间】:2015-08-25 15:22:54
【问题描述】:

我为我的 AWS 实例使用自定义标签。我正在尝试在 CSV 文件中列出所有实例(运行和停止)。不是程序员,我搜索并复制/粘贴了代码,并附带了一个运行良好的脚本。但我注意到,如果缺少一个标签,则脚本会引发错误并停在那里。如果标签已创建但为空,则脚本将打印一个空格,但如果根本没有创建标签,则脚本将停止。例如,如果标签 Owner 丢失,则会抛出错误 KeyError: 'Owner' 并停在那里。我的脚本粘贴在下面。有人可以让我知道我需要进行哪些更改,以便如果标签不存在,脚本会打印出 N/A 而不是停止。

#!/usr/bin/env python
import boto.ec2 
from boto.ec2 import EC2Connection
csv_file = open('/home/sbasnet/Scripts/Instances/instances_east.csv','w+')
 def process_instance_list(connection):
    map(build_instance_list,connection.get_all_instances())
 def build_instance_list(reservation):
    map(write_instances,reservation.instances)
 def write_instances(instance):
    if (instance.platform == 'windows'):
        platform = 'Windows'
    else:
        platform = 'Linux'
    csv_file.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n"%(instance.id,instance.private_ip_address,instance.tags['Classification'],instance.tags['FQDN'],instance.tags['Owner'],instance.tags['RunType'],instance.instance_type,instance.subnet_id,instance.key_name,platform,instance.placement))
    csv_file.flush()
 if __name__=="__main__":
    connection = EC2Connection(aws_access_key_id='ACCESS',aws_secret_access_key='SECRET')
    process_instance_list(connection)
    csv_file.close()

TIA sbasnet

【问题讨论】:

    标签: python csv amazon-web-services amazon-ec2 boto


    【解决方案1】:

    也许这样的事情会做?

    警告:未经测试

    #!/usr/bin/env python
    import boto.ec2 
    from boto.ec2 import EC2Connection
    
    csv_file = open('/home/sbasnet/Scripts/Instances/instances_east.csv','w+')
    
    def process_instance_list(connection):
        map(build_instance_list,connection.get_all_instances())
    
    def build_instance_list(reservation):
        map(write_instances,reservation.instances)
    
    def get_tag(tags, tag_name):
        if tag_name in tags.keys():
            return tags[tag_name]
        else:
            return "N/A"
    
    def write_instances(instance):
        if instance.platform == 'windows':
            platform = 'Windows'
        else:
            platform = 'Linux'
        csv_file.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n"%(instance.id,
                                                             instance.private_ip_address,
                                                             get_tag(instance.tags, "Classification"),
                                                             get_tag(instance.tags, "FQDN"),
                                                             get_tag(instance.tags, "Owner"),
                                                             get_tag(instance.tags, "RunType"),
                                                             instance.instance_type,
                                                             instance.subnet_id,
                                                             instance.key_name,
                                                             platform,
                                                             instance.placement))
        csv_file.flush()
    
    
    if __name__=="__main__":
        connection = EC2Connection(aws_access_key_id='ACCESS',aws_secret_access_key='SECRET')
        process_instance_list(connection)
        csv_file.close()
    

    【讨论】:

    • @sbasnet 很高兴它成功了。如果确实如此,请将答案标记为解决方案(并投票:))
    猜你喜欢
    • 2014-11-17
    • 2013-10-31
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多