2017-05-09 1 views
0

내가 print asg['AutoScalingGroupName']자동 스케일링 그룹에 인스턴스의 IP를 가져 오는 방법

import boto 
import boto3 

client = boto3.client('autoscaling', region_name='us-west-2') 
autoscale = boto.connect_autoscale() 
ec2 = boto.connect_ec2() 
paginator = client.get_paginator('describe_auto_scaling_groups') 
page_iterator = paginator.paginate(PaginationConfig={'PageSize': 100} 
) 

filtered_asgs = page_iterator.search(
    'AutoScalingGroups[] | [?contains(Tags[?Key==`{}`].Value, `{}`)]'.format('Application', 'CCP') 
) 

for asg in filtered_asgs: 
    print asg['AutoScalingGroupName'] 
     group = autoscale.get_all_groups(asg['AutoScalingGroupName'])[0] 
     instance_ids = [i.instance_id for i in group.instances] 
     reservations = ec2.get_all_instances(instance_ids) 
     instances = [i for r in reservations for i in r.instances] 
     print instances 

이 제발 도와주세요 사용하여 내가 매기기를 사용하여 나열 및 인쇄 한 각 자동 스케일링 그룹의 모든 인스턴스의 IP 정보를 얻기 위해 노력 해왔다 내가 여기서 뭘 놓치고 있는지 찾아야 해.

+0

당신은 확인 했 [이] (http://stackoverflow.com/a/12592543/1535071) 및 [이] (http://stackoverflow.com/a/22544230/1535071) 답변? – imTachu

+0

예, 제 스크립트에 추가했습니다. 루프에서 ASG 이름으로 mygroupname을 바꾼 것을 볼 수 있습니다. 내가 코딩 한 방식이 잘못된 것처럼 보입니다. 제안 할 것이 있습니까 ?. – Ashfaq

+0

질문이 나에게 명확하지 않습니다. 오류가 있습니까? 전혀 인쇄하고 있습니까? 전체 과정의 어느 부분에 붙어 있습니까? – imTachu

답변

1

이 조각은 당신이 당신의 특정 필터를 추가해야 작동합니다 :

#!/usr/bin/env python 

import boto3 

ec2 = boto3.resource('ec2') 

def get_instances(): 
    client = boto3.client('autoscaling') 
    paginator = client.get_paginator('describe_auto_scaling_groups') 
    groups = paginator.paginate().build_full_result() 

    for asg in groups['AutoScalingGroups']: 
     print asg['AutoScalingGroupName'] 
     instance_ids = [i for i in asg['Instances']] 
     running_instances = ec2.instances.filter(Filters=[{}]) 
     for instance in running_instances: 
      print(instance.id, instance.public_dns_name, instance.private_ip_address) 

if __name__ == '__main__': 
    get_instances() 
+0

사용하는 필터는 ASG를 태그 당. 코드에서 다음 필터를 가져 오는 방법을 제안 해주십시오. 'filtered_asgs = page_iterator.search ( 'AutoScalingGroups [] | [태그 :? Key =='{}'] .Value,'{}}] '형식)'형식 ('응용 프로그램', 'CCP') )' 난 내 자신에 의해 시도와 오류 아래에 표시되어 : 는'AttributeError가 'DICT'개체 당신은 [여기]이 (HTTPS의 힌트를 얻을 수있는 속성 'search'' – Ashfaq

+0

가 없습니다 : // 요점 .github.com/sahilsk/dee8f6d0ed4e4cbecea4bc34c9c5e689) – imTachu

+0

EC2 인스턴스에 대해이 필터로 작업했습니다. 그러나 이것은 나에게 boto3을 사용하는 ASGs에서 효과가 없었습니다. 어떻게 내가 매력처럼 작동하는 페이징 기술을 발견했는지. 귀하의 미리보기가 정말 좋습니다. 하지만 귀하의 코드에 ASG 플러터를 적용 할 수 없습니다. 내가 할 때, 그것은 위에서 언급 한 오류를 반환합니다. : ( – Ashfaq

0

@Lorena, 귀하의 제안은 정말 도움이되었습니다.

다음과 같이 결과를 올바르게 필터링했습니다.

import boto3 

ec2 = boto3.resource('ec2', region_name='us-west-2') 

def get_instances(): 
     client = boto3.client('autoscaling', region_name='us-west-2') 
     paginator = client.get_paginator('describe_auto_scaling_groups') 
     groups = paginator.paginate(PaginationConfig={'PageSize': 100}) 
     #print groups 
     filtered_asgs = groups.search('AutoScalingGroups[] | [?contains(Tags[?Key==`{}`].Value, `{}`)]'.format('Application', 'CCP')) 

     for asg in filtered_asgs: 
       print asg['AutoScalingGroupName'] 
       instance_ids = [i for i in asg['Instances']] 
       running_instances = ec2.instances.filter(Filters=[{}]) 
       for instance in running_instances: 
         print(instance.private_ip_address) 

if __name__ == '__main__': 
    get_instances() 
+0

놀라운, 도와 줘서 기쁩니다 :) – imTachu

관련 문제