【问题标题】:Boto: how to get security group by id?Boto:如何通过 id 获取安全组?
【发布时间】:2016-04-12 13:35:16
【问题描述】:

我正在尝试按组 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>

所以基本上它说“默认 VPC 'vpc-d289c0bb' 中不存在安全组 'sg-45b9a12c'”

但默认 VPC 中确实存在此安全组!这是证明: AWS console screenshot

我怎样才能完成这项工作?

非常感谢您的回答。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 boto aws-ec2 ec2-api-tools


    【解决方案1】:

    简答:

    只是改变

    GivenSecGroup=conn.get_all_security_groups(sec_group_id)
    

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

    长答案:

    get_all_security_groups 第一个参数是安全组名称列表,第二个是 id 列表:

    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.
    

    【讨论】:

    • 非常感谢,Vor!这正是我所需要的!
    【解决方案2】:

    我将在 @Vor 旁边显示替代 boto3 答案。

    恕我直言,您应该切换到 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。

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2021-09-22
      • 2014-09-08
      • 2018-12-13
      相关资源
      最近更新 更多