2015-07-18 1 views
4

Я пытаюсь поиграть с python boto, и я запускаю приведенный ниже пример (ниже для этого официальный документ). Я знаю, что существует SG, называемый «Pub_HDP_SG», но когда я пытаюсь запустить свою команду, передав параметр, называемый groupnames, я получаю ниже ошибки. Я получаю тот факт, что этот SG не существует в моем VPC по умолчанию, поэтому как установить VPC на определенный VPC?извлекать группы безопасности, используя python boto, но установить vpc id

http://boto.readthedocs.org/en/latest/ref/ec2.html?highlight=get_all_security_groups#boto.ec2.connection.EC2Connection.get_all_security_groups

>>> import boto 
>>> ec2 = boto.connect_ec2() 
>>> sg = ec2.get_all_security_groups() 
>>> print sg 
[SecurityGroup:default, SecurityGroup:Pub_HDP_SG, SecurityGroup:RDP Rule - open everyone , SecurityGroup:us-east-open-all, SecurityGroup:wordpress-app-SG, SecurityGroup:default, SecurityGroup:AWS-AMI-SG, SecurityGroup:launch-wizard-2] 
>>> 
>>> sgn = "Pub_HDP_SG" 
>>> 
>>> sg = ec2.get_all_security_groups(groupnames=[sgn]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.6/site-packages/boto/ec2/connection.py", line 2968, in get_all_security_groups 
    [('item', SecurityGroup)], verb='POST') 
    File "/usr/lib/python2.6/site-packages/boto/connection.py", line 1186, 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 'Pub_HDP_SG' does not exist in default VPC 'vpc-b3bf61d6'</Message></Error></Errors><RequestID>c708a4cd-0bc9-4761-a5a6-556b1c68ecdb</RequestID></Response> 
>>> 

ответ

6

Это причудливый аспект EC2 API. Параметр group names будет работать только с группами безопасности в VPC по умолчанию (или в EC2 Classic). Если вы хотите найти группы в любом VPC по имени, используйте вместо этого параметр filters.

groups = ec2.get_all_security_groups(filters={'group-name': [sgn]}) 

Это должно вернуть список, но обратите внимание, что он по-прежнему возвращает список групп, а не только объект скалярной группы.

+0

хорошо, что имеет смысл. Я сделал следующее и смог получить то, что искал ... еще один вопрос, который у меня есть, как узнать, какие фильтры я могу использовать ... глядя на документ, я не вижу, какие фильтры можно использовать >>> fts = {'vpc_id': 'vpc-1895327d', 'group-name': 'Pub_HDP_SG'} >>> groups = ec2.get_all_security_groups (filters = fts) >>> группы печати [SecurityGroup: Pub_HDP_SG] >>> –

+2

Есть два места, которые я знаю, которые имеют документы для фильтров. Первый - это документы EC2 API (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html), а второй - документы для AWSCLI (http://docs.aws.amazon.com /cli/latest/reference/ec2/describe-security-groups.html). – garnaat

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