我要说的第一点是,一个保留可以有多个与之关联的实例。它并不总是一对一的映射。如果您调用run_instances
并请求创建多个实例,则所有实例都将关联到同一个预留。
你说你用的get_all_instances
方法。此方法返回一个 Reservation 对象列表。这些 Reservation 对象中的每一个都可能具有与其关联的多个 Instance 对象。Reservation 对象并不是那么有用,因此通常您要做的只是立即将 Reservation 对象列表转换为 Instance 对象列表。一种方法是:
import boto.ec2
conn = boto.ec2.connect_to_region('us-west-2') # or whatever region you want
reservations = conn.get_all_instances() # could limit results with filters
instances = []
for r in reservations:
instances.extend(r.instances)
该变量instances
现在应该是 Instance 对象的列表。每个 Instance 对象都有一个名为的属性,该属性id
包含它的唯一实例 ID。
做同样事情的更紧凑的方法是使用嵌套列表推导,如下所示:
# same first three lines as above
instances = [i for r in reservations for i in r.instances]