Je ne peux pas trouver le code avec boto3. Je suis capable d'obtenir le nom elb et InstanceID séparément, mais je ne peux pas les lier ensemble pour trouver des instances attachées aux noms d'ELB.Comment faire pour interroger AWS pour obtenir des noms ELB et des instances attachées à cela en utilisant des modules python boto3?
Répondre
C'est ma solution ce que je l'ai eu à travailler. Merci John.
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);
classique Load Balancer
Le boto3 describe_load_balancers()
fonctions retourne une liste d'instances:
{
'LoadBalancerDescriptions': [
{
'LoadBalancerName': 'string',
'DNSName': 'string',
....
'Instances': [
{
'InstanceId': 'string'
},
],
....
},
],
'NextMarker': 'string'
}
La section Instances
renvoie les ID des instances pour l'équilibrage de charge.
charge d'application d'équilibrage (ELBv2)
Celui-ci est plus difficile. L'équilibreur de charge d'application a plusieurs groupes cibles . Les ports sur les instances sont enregistrés dans un groupe cible.
La seule commande qui semble à la liste des cas dans un groupe cible est describe_target_health()
, qui renvoie le exemple et le port (parce qu'une instance peut servir plusieurs cibles):
{
'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': {
'...': '...',
},
}
Ceci est un script simple pour trouver la liste de l'instance attachée à un ELB, comme entrée, vous devrez peut-être fournir le nom 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('[]')
Salut @ Sam, si cela ou d'une réponse a a résolu votre question s'il vous plaît envisager [acceptant] (http://meta.stackexchange.com/q/5234/179419) en cliquant sur la coche. Ceci indique à la communauté plus large que vous avez trouvé une solution et donne une certaine réputation à la fois le répondeur et vous-même. Il n'y a aucune obligation de le faire. –