2015-06-04 42 views
0

在VPC和EC2 Classic中有一個包含實例的AWS賬戶。我嘗試使用get_only_instances()方法分別列出它們,但似乎過濾器不適用於未設置參數(VPC:無)。是否可以使用Boto get_only_instances()來列出沒有VPC的實例?

import boto 
import boto.ec2 
conn = boto.ec2_connect_to_region('us-east-1', profile_name='qa') 
a = conn.get_only_instances(filters={'vpc_id':'vpc-a0876691'}) 
# len(a) > 0, and should be so 
b = conn.get_only_instances(filters={'vpc_id':None}) 
# len(b) = 0, but should be > 0 

BTW。我看到下面的方法來很好地工作:

b = [i for i in conn.get_only_instances() if not i.vpc_id] 
# len(b) > 0, and should be so 

回答

0

的呼叫get_only_instances最終使該DescribeInstances endpoint in the API通話。

具體而言,Boto將使用過濾器'vpc-id',在上述鏈接文檔中聲明爲'實例運行的VPC的ID'。

不幸的是,我還沒有找到一種方法來通過Boto查詢這個表示布爾「不」操作。我添加了這個答案,表明我不認爲這是可能的。

要解決這個問題,我使用類似的方法對你的:

import boto 
import boto.ec2 

conn = boto.ec2.connect_to_region('us-east-1') 
has_vpc = {'vpc-id': '*'} 

r_with_vpc = conn.get_only_instances(filters=instance_filters) 
r_all = conn.get_only_instances() 


instance_vpc_list = [i.id for i in r_with_vpc] 
instance_all = [i.id for i in r_all] 

instance_without_vpc = [ i for i in instance_all if i not in instance_vpc_list ] 

唯一真正的區別是我建的主機中間清單,任何 VPC設置,這樣我不需要提前知道VPC ID。

相關問題