如何限制Amazon Boto中get_all_images的输出?

3 投票
3 回答
3563 浏览
提问于 2025-04-18 08:33

我尝试使用Python的boto库加载AWS的镜像列表。我的代码是这样的:

con = boto.connect_ec2(user, pasw)
images_list = con.get_all_images()

我怎么才能只获取函数 get_all_images() 的前10个结果呢?

我想要的类似于 con.get_all_images(maxresult=10) 这样的东西。

3 个回答

0

我想分享一下如何找到名字标签中包含特定字符串的图片,这个方法是基于storm_m2138的回答:

amis = EC2conn.get_all_images(
    filters={
        "tag-key":"Name",
        "tag-value":"*some_string"
    }
)
3

如果你只想获取你的图片,你需要指定一个叫做 owners 的参数。

另外值得注意的是,名称可以使用通配符,如果你想根据图片名称进行筛选的话:

images = ec2Connection.get_all_images(owners = ['self'], filters = {'name':'*image*'})
7

根据boto的文档你不能直接限制这个函数返回的图片数量。这是因为它缺乏相应的API支持(见下面的链接),这并不是boto本身的问题。

过滤

不过,如果你想根据某些特定的属性来限制结果,可以传递一个filters参数。

filters(字典)– 可选的过滤器,用于限制返回的结果。过滤器以字典的形式提供,字典的键是过滤器名称,值是过滤器的值。允许的过滤器名称和对应的值取决于你所执行的请求。具体细节请查看EC2 API指南。

例如

c.get_all_images(filters={'architecture': 'x86_64'})

支持的属性可以在AWS文档中找到。

限制

这个函数返回的是一个列表,所以如果你真的只想限制结果的数量,可以这样做:

images = con.get_all_images()[:10]

注意事项

请记住,API并不保证返回结果的特定顺序(至少文档中没有说明),所以你的前10张图片可能会随时间而变化。

如果你有太多图片,可能会占用内存,所以如果可以的话,我建议你根据一些属性进行过滤。

撰写回答