Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅从一组标记的ec2实例中获取唯一的标记_Python_Amazon Web Services_Boto - Fatal编程技术网

Python 仅从一组标记的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

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 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]
然后,您可以将其输入到另一个函数中,该函数根据用途处理此有效负载