0

Я пытаюсь получить группу безопасности по id группы.Boto: как получить группу безопасности по id?

Вот код:

#!/usr/bin/env python2.7 
import boto.ec2 
import argparse 

parser = argparse.ArgumentParser(description="") 
parser.add_argument('sec_group_id', help='Security group id') 
parser.add_argument('region_name', help='Region name') 
args = parser.parse_args() 
sec_group_id = args.sec_group_id 
region_name = args.region_name 

conn = boto.ec2.connect_to_region(region_name); 

GivenSecGroup=conn.get_all_security_groups(sec_group_id) 

Когда я выполняю это:

./sec_groups.py sg-45b9a12c eu-central-1 

Я получаю результат:

Traceback (most recent call last): 
    File "./sec_groups.py", line 22, in <module> 
    GivenSecGroup=conn.get_all_security_groups(sec_group_id) 
    File "/usr/lib/python2.7/dist-packages/boto/ec2/connection.py", line 2969, in get_all_security_groups 
    [('item', SecurityGroup)], verb='POST') 
    File "/usr/lib/python2.7/dist-packages/boto/connection.py", line 1182, in get_list 
    raise self.ResponseError(response.status, response.reason, body) 
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>InvalidGroup.NotFound</Code><Message>The security group 'sg-45b9a12c' does not exist in default VPC 'vpc-d289c0bb'</Message></Error></Errors><RequestID>edf2afd0-f552-4bdf-938e-1bccef798145</RequestID></Response> 

Так в основном он говорит: «SG группы безопасности» -45b9a12c 'не существует по умолчанию VPC' vpc-d289c0bb '"

Но эта группа безопасности существует по умолчанию VPC! Вот доказательство: AWS console screenshot

Как это сделать?

Буду Вам благодарен за ваш ответ.

ответ

2

Короткий ответ:

просто изменить

GivenSecGroup=conn.get_all_security_groups(sec_group_id) 

в

GivenSecGroup=conn.get_all_security_groups(group_ids=[sec_group_id]) 

Длинный ответ:

get_all_security_groups первый аргумент я S список имен групп безопасности и второй список идентификаторов:

def get_all_security_groups(self, groupnames=None, group_ids=None, 
          filters=None, dry_run=False): 
    """ 
    Get all security groups associated with your account in a region. 

    :type groupnames: list 
    :param groupnames: A list of the names of security groups to retrieve. 
         If not provided, all security groups will be 
         returned. 

    :type group_ids: list 
    :param group_ids: A list of IDs of security groups to retrieve for 
         security groups within a VPC. 
+0

Большое вам спасибо, Vor! Вот что мне нужно! – Ivan

1

Я покажу альтернативный boto3 ответ рядом @Vor.

IMHO, вы должны перейти на boto3, разработчик ясно дал понять, что boto не будет поддерживать новые функции. Вам не нужно указывать регион, вы можете связать регион с файлом учетных данных и т. Д.

import boto3 
import argparse 
ec2=boto3.client("ec2") 
parser = argparse.ArgumentParser(description="") 
parser.add_argument('sec_group_id', help='Security group id') 
args = parser.parse_args() 
sec_group_id = args.sec_group_id 

my_sec_grp = ec2.describe_security_groups(GroupIds = [sec_group_id]) 

Boto3 тесно связаны с AWS Cli. В текущем AWS cli есть такие функции, как «--query», которые позволяют фильтровать результаты. Если AWS реализует эти функции, это будет в boto3, а не boto.

Смежные вопросы