Boto 问题列出没有标签的 AWS 实例

Boto issues listing AWS instances with no-tags

我为我的 AWS 实例使用自定义标签。我正在尝试在 CSV 文件中列出所有实例(运行 和已停止)。不是程序员,我搜索并 copied/pasted 代码并附带了一个运行良好的脚本。但我注意到,如果缺少一个标签,脚本就会抛出一个错误并就此停止。如果标签已创建但为空,则脚本会打印空白 space,但如果根本未创建标签,则脚本会停止。例如,如果标签 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

也许像这样可以吗?

警告:未经测试

#!/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()