使用 python boto 检索安全组但设置 vpc id

retrieve security groups using python boto but set vpc id

我正在尝试使用 python boto 和 运行 下面的示例(下面是官方文档)。我知道一个名为 "Pub_HDP_SG" 的 SG 确实存在,但是当我尝试通过传入一个名为 groupnames 的参数来 运行 我的命令时,出现以下错误。我知道这个 SG 在我的默认 VPC 中不存在,那么我该如何将我的 VPC 设置为特定的 VPC?

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>
>>>

这是 EC2 的一个古怪方面 API。 group names 参数仅适用于默认 VPC(或 EC2 Classic)中的安全组。如果您想按名称在任何 VPC 中查找组,请改用 filters 参数。

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

这应该是 return 列表,但请注意它仍然是 return 组列表,而不仅仅是标量组对象。