Python 仅从一组标记的ec2实例中获取唯一的标记
ec2标记有以下内容: 环境、项目、目的 具有属于项目和环境的实例列表Python 仅从一组标记的ec2实例中获取唯一的标记,python,amazon-web-services,boto,Python,Amazon Web Services,Boto,ec2标记有以下内容: 环境、项目、目的 具有属于项目和环境的实例列表 conn = ec2.connect_to_region(region,aws_access_key_id=access_key,aws_secret_access_key=secret_key) reservations = conn.get_all_instances(filters={"tag:env":env, "tag:project":project}) instances = [i for r in reser
conn = ec2.connect_to_region(region,aws_access_key_id=access_key,aws_secret_access_key=secret_key)
reservations = conn.get_all_instances(filters={"tag:env":env, "tag:project":project})
instances = [i for r in reservations for i in r.instances]
instances_id = [i.id for i in instances]
现在需要一种方法来获取列表instance_id中每个实例的标记'purpose'的值
这样我就可以根据目的采取行动
我正在查看boto的get_all_tags函数,但无法确定如何在该函数的过滤器中获取每个实例的id。还有一件事,我只需要有目的的独特价值观
我该如何完成这项工作?试试这个:
for inst in instances:
if 'purpose' in inst.tags:
print "%s -> %s" % (inst.id, inst.tags['purpose'])
输出:
i-0123abcd -> foo
i-0123abcf -> bar
我相信您需要一种根据purpose标记的值对所有实例进行分组的方法
def get_instances_by_purpose(access_key,secret_key,region,env,project):
conn = ec2.connect_to_region(region,aws_access_key_id=access_key,aws_secret_access_key=secret_key)
reservations = conn.get_all_instances(filters={"tag:env":env, "tag:project":project})
instances = [i for r in reservations for i in r.instances]
instances_by_purpose = {}
[instances_by_purpose.setdefault(i.tags.get('purpose'), []).append(i.id) for i in instances]
return instances_by_purpose
instances\u by\u purpose
变量包含一个字典,其中包含所有可能遇到的purpose值,每个purpose的值是具有该用途的所有实例的列表
e、 g.目的值=“Web服务器”、“备份服务器”、“日志”
输出将是
{“Web服务器”:[“i-sdfsfd”、“i-sdfsfd”、“i-sdfsfd”],
“备份服务器”:[“i-werwer”、“i-erwer”、“i-3242erds”],
.....
}
您可以将其更改为公共IP或私有IP的列表,或者您可以从实例对象提取的任何其他属性。
e、 g.如果您想要公共IP,请按以下方式更改列表:
[instances_by_purpose.setdefault(i.tags.get('purpose'), []).append(i.ip_address) for i in instances]
然后,您可以将其输入到另一个函数中,该函数根据用途处理此有效负载