0

Ich versuche, die Sicherheitsgruppe nach Gruppen-ID zu bekommen. HierBoto: Wie man Sicherheitsgruppe durch Identifikation erhält?

ist der Code:

#!/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) 

Als ich dies ausführen:

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

ich die Ausgabe:

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> 

Also im Grunde sagt, dass es „die Sicherheitsgruppe‚sg -45b9a12c 'existiert nicht in der Standard-VPC' vpc-d289c0bb '"

Diese Sicherheitsgruppe existiert jedoch in der Standard-VPC! Hier ist der Beweis: AWS console screenshot

Wie kann ich das schaffen?

Ich wäre dankbar für Ihre Antwort.

Antwort

2

Kurze Antwort:

nur

GivenSecGroup=conn.get_all_security_groups(sec_group_id) 

zu

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

Langer Antwort ändern:

get_all_security_groups erstes Argument i s eine Liste der Sicherheitsgruppennamen und die zweite ist die Liste der ids:

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

Vielen Dank, Vor! Das habe ich gebraucht! – Ivan

1

ich alternative boto3 Antwort neben @Vor zeigen.

IMHO, sollten Sie zu Boto3 wechseln, hat der Entwickler klar gemacht, dass Boto keine neuen Funktionen unterstützt. Sie müssen keine Region angeben, Sie können die Region innerhalb der Anmeldeinformationsdatei usw.

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 sind eng mit AWS Cli verbunden. Der aktuelle AWS-CLI weist Funktionen wie "Abfrage" auf, mit denen Benutzer die Ergebnisrückgabe filtern können. Wenn AWS diese Funktionen implementiert, wird dies in boto3 und nicht in boto geschehen.