2016-04-21 1 views
0

Я не могу проходить через список регионов AWS, которые я предоставил & i am confused почему список начинается в обратном порядке?Как пройти через весь регион aws, чтобы получить информацию о группе безопасности

Этот код в основном подключается через все AWS регионы один за другим, а затем выводит данные о группе безопасности:

regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-southeast-1','ap-southeast-2','ap-northeast-1'] 
for region in regions: 
    connection=ec2.connect_to_region(region) 
    sg.extend(connection.get_all_security_groups()) 


def getTag(instanceId): 

    reservations=connection.get_all_instances(filters={'instance_id':instanceId}) 
    for res in reservations: 
     for instance in res.instances: 
      return instance.tags['Name'],instance.private_ip_address,instance.region 

try: 

    for securityGroup in sg: 
     for rule in securityGroup.rules: 
      global instanceId; 
      if rule.to_port == '22' and '0.0.0.0/0' in str(rule.grants): 
       for instanceid in securityGroup.instances(): 
        instanceId=str(instanceid) 
        print "Port 22 is open for 0.0.0.0/0:, SecurityGroupName: %s Instance Details --> : %s " %(securityGroup.name, getTag(instanceId.split(':')[1])) 

На основании ответа, я сейчас не в состоянии получить информацию экземпляра, результат

Port 22 is open for 0.0.0.0/0:, SecurityGroupName: interview-linux Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: interview-linux Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: launch-wizard-mingjun Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: SSH+HTTPS Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: temp-engg-logi Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-prod-1w-secgroup Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-prod-1w-secgroup Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-trial-1w-secgroup Instance Details --> : None 
Port 22 is open for 0.0.0.0/0:, SecurityGroupName: na-trial-1w-secgroup Instance Details --> : Non 

ответ

2

Потому что в вашей петле for region in regions: вы переписываете sg на каждой итерации. То, что вы, вероятно, хотите,

sg = list() 
for region in regions: 
    connection=ec2.connect_to_region(region) 
    sg.extend(connection.get_all_security_groups()) 

Edit: (Instance Подробности ->: Нет)

Проблема здесь в том, в цикле я уже упоминал ранее, вы перезапись connection тоже есть connection=ec2.connect_to_region(region).

Так что, когда вы делаете connection.get_all_instances(filters={'instance_id':instanceId}) в методе getTag, instanceId ищется только в последней области т.е. ap-northeast-1. Поскольку экземпляр не принадлежит этому региону, вы получаете None.

Вам нужно реорганизовать свой код, чтобы что-то вроде

def getTag(connection, instanceId): 
    reservations=connection.get_all_instances(filters={'instance_id':instanceId}) 
    for res in reservations: 
     for instance in res.instances: 
      return instance.tags['Name'],instance.private_ip_address,instance.region 

regions = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-southeast-1','ap-southeast-2','ap-northeast-1'] 
for region in regions: 
    connection=ec2.connect_to_region(region) 
    sg = connection.get_all_security_groups() 
    try: 
     for securityGroup in sg: 
      for rule in securityGroup.rules: 
       if rule.to_port == '22' and '0.0.0.0/0' in str(rule.grants): 
        for instanceid in securityGroup.instances(): 
         instanceId=str(instanceid) 
         print "Port 22 is open for 0.0.0.0/0:, SecurityGroupName: %s Instance Details --> : %s " %(securityGroup.name, getTag(connection, instanceId.split(':')[1])) 
+0

правильных .. спасибо, но теперь я не смог получить информацию экземпляра, держитесь обновить свой вопрос с ответом –

+0

Возможно, мне нужно петля через ' Оговорки = connection.get_all_instances() ' –

+0

oh okay .. это работает .. сейчас .. спасибо mate –