在哪里可以找到如何构建ec2.instancesCollection的概述

时间:2015-11-16 09:55:06

标签: python-3.x amazon-ec2 boto3

在boto3中有一个功能:

    ec2.instances.filter()

文件: http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#instance

说它返回一个列表(ec2.Instance)我希望...

当我尝试打印返回时,我得到了这个:

    ec2.instancesCollection(ec2.ServiceResource(), ec2.Instance)

我已经尝试过搜索ec2.instanceCollection的任何提及,但我发现的唯一的东西类似于ruby。

我想遍历这个instanceCollection,所以我可以看到它有多大,存在什么样的机器以及类似的东西。 问题是我不知道它是如何工作的,当它是空的迭代根本不起作用时(它会抛出错误)

2 个答案:

答案 0 :(得分:2)

filter方法不返回列表,它返回一个iterable。这基本上是一个Python生成器,它将以有效的方式按需生成所需的结果。

你可以在这样的循环中使用这个迭代器:

for instance in ec2.instances.filter():
    # do something with instance

或者如果你真的想要一个列表,你可以将迭代器变成一个列表:

instances = list(ec2.instances.filter())

答案 1 :(得分:2)

我要添加此答案,因为5年后,我遇到了同样的问题,并转了一圈试图找到答案。

首先,文档中的返回类型错误(仍然)。如您所说,它声明返回类型为:
list(ec2.Instance)
应该在哪里:
ec2.instancesCollection
在撰写本文时,github中存在一个涉及此问题的公开问题-https://github.com/boto/boto3/issues/2000

调用过滤器方法时,将为您针对其调用方法的特定类型的资源创建ResourceCollection。在这种情况下,资源类型为instance,它给出了instancesCollection。您可以在此处查看ResourceCollection的{​​{1}}超类的代码: https://github.com/boto/boto3/blob/develop/boto3/resources/collection.py

此处的文档提供了集合的概述:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/collections.html

要了解如何使用它并实际回答您的问题,我要做的是将迭代器转换为列表,并在大小大于0时遍历列表。

instancesCollection

这可能不是最好的方法,但对我有用。