2017-03-17 7 views
-2

boto3으로 코드를 찾을 수 없습니다. ELB 이름과 InstanceID를 따로 얻을 수는 있지만 ELB 이름에 연결된 인스턴스를 찾기 위해 함께 링크 할 수 없습니다.AWS에서 ELB 이름과 연결된 인스턴스를 얻기 위해 python boto3 모듈을 사용하여 AWS를 쿼리하는 방법은 무엇입니까?

{ 
    'LoadBalancerDescriptions': [ 
     { 
      'LoadBalancerName': 'string', 
      'DNSName': 'string', 
      .... 
      'Instances': [ 
       { 
        'InstanceId': 'string' 
       }, 
      ], 
      .... 
     }, 
    ], 
    'NextMarker': 'string' 
} 

Instances 섹션은 부하 분산에 대한 인스턴스의 ID를 반환

답변

0

이 내 솔루션입니다 :

대상 그룹에 인스턴스를 나열하는 것 같다 유일한 명령은 및 포트 (하나 개의 인스턴스가 여러 대상 서비스를 제공 할 수 있기 때문에)을 인스턴스를 반환 describe_target_health()입니다 나는 그것이 작동하도록했다. 존 감사합니다.

elbList = boto3.client('elb') 
ec2 = boto3.resource('ec2') 

bals = elbList.describe_load_balancers() 
for elb in bals['LoadBalancerDescriptions']: 
    print 'ELB DNS Name : ' + elb['DNSName'] 
    for ec2Id in elb['Instances']: 
     running_instances = \ 
      ec2.instances.filter(Filters=[{'Name': 'instance-state-name' 
           , 'Values': ['running']}, 
           {'Name': 'instance-id', 
           'Values': [ec2Id['InstanceId']]}]) 
     for instance in running_instances: 
      print("    Instance : " + instance.public_dns_name); 
2

클래식로드 밸런서

boto3 describe_load_balancers() 기능은 인스턴스의 목록을 반환합니다.

애플리케이션로드 밸런서 (ELBv2)는

이 것은 어렵다. 응용 프로그램로드 밸런서에는 대상 그룹이 여러 개 있습니다. 인스턴스의 포트는 대상 그룹에 등록됩니다.

{ 
    'TargetHealthDescriptions': [ 
     { 
      'Target': { 
       'Id': 'i-0f76fade', 
       'Port': 80, 
      }, 
      'TargetHealth': { 
       'Description': 'Given target group is not configured to receive traffic from ELB', 
       'Reason': 'Target.NotInUse', 
       'State': 'unused', 
      }, 
     }, 
     { 
      'HealthCheckPort': '80', 
      'Target': { 
       'Id': 'i-0f76fade', 
       'Port': 80, 
      }, 
      'TargetHealth': { 
       'State': 'healthy', 
      }, 
     }, 
    ], 
    'ResponseMetadata': { 
     '...': '...', 
    }, 
} 
+1

안녕 @Sam이 또는 어떤 대답이 경우 귀하의 질문에 대한 답변을 [accepting it] (http://meta.stackexchange.com/q/5234/179419)를 클릭하여 확인하십시오. 이는 해결책을 찾았으며 응답자와 자신에게 어느 정도의 평판을 제공한다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. –

0

이 당신이 ELB 이름을 제공 할 수있는 입력으로 ELB에 부착 된 인스턴스의 목록을 찾을 수있는 간단한 스크립트입니다

#!/usr/bin/python 

import boto3 
import sys 
import string 


elb_name = raw_input("What is ELB name? :: ") 

print ("\n") 
print ("THE LIST OF INSTANCES ATTACHED TO THIS ELB IS \n") 
elbList = boto3.client('elb') 
ec2 = boto3.resource('ec2') 

bals = elbList.describe_load_balancers() 
for elb in bals['LoadBalancerDescriptions']: 

    set2 = elb['LoadBalancerName'] 
    if elb_name == set2 : 
     inst = elb['Instances'] 
     ct = sys.getrefcount(inst) 
     count = ct 
     for x in range(count): 
      iv = elb['Instances'][x] 
      id = str(iv.values()) 
      id = string.replace(id, "'", "") 
      print id.strip('[]')