2017-10-05 56 views
-2

1)如何從博託落實到boto3這個代碼:寶途至Boto3函數實現

conn = boto.connect_ec2() # boto way 
sgs = conn.get_all_security_groups() # boto way 
for sg in sgs: 
    if len(sg.instances()) == 0: 
     print(sg.name, sg.id, len(sg.instances())) 

上面的代碼基本上打印所有安全組,沒有附加的情況。


2)以及使用duct.sh()模塊此個體命令:

command = 'aws ec2 describe-instances --filters "Name=instance.group-id,Values=' + sg.id + '\" --query \'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`] | [0].Value]\' --output json' 
+1

聽起來很像'給我寫代碼',所以建議您閱讀boto 3 doc (http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.describe_security_groups)並檢查http://boto3.readthedocs.io/en/latest/reference/services /ec2.html#EC2.Client.describe_instances –

+0

你在問題的第二部分實際提出了什麼?隨意創建一個單獨的問題,如果它是不相關的。 –

回答

1

博託:get_all_security_groups()

boto3:security_group_iterator = ec2.security_groups.all()

然而,博託對boto.ec2.securitygroup.SecurityGroup.instances()方法,而boto3在ec2.SecurityGroup上沒有等效的方法。

因此,它看起來像你得打個電話describe_instances(),通過安全組作爲Filter

response = client.describe_instances(
    Filters=[{'Name':'instance.group-id','Values':['sg-abcd1234']}]) 

這將返回使用所給安全組實例的列表。

然後,您可以計數len(response['Reservations'])來查找未使用的安全組。 (注意:這是找到零長度響應的簡單方法,但要計算實際實例需要將所有實際實例相加Reservations.Instances。)

+0

真棒會去嘗試一下。我無法在boto3中找到該方法。 – codelinx