我找不到boto3的代码。我可以单独获取elb名称和InstanceID,但无法将它们链接在一起以查找ELB名称的附加实例。
答案 0 :(得分:7)
经典负载均衡器
boto3 describe_load_balancers()
函数返回实例列表:
{
'LoadBalancerDescriptions': [
{
'LoadBalancerName': 'string',
'DNSName': 'string',
....
'Instances': [
{
'InstanceId': 'string'
},
],
....
},
],
'NextMarker': 'string'
}
Instances
部分返回负载均衡器的实例ID。
应用程序负载均衡器(ELBv2)
这个更难。应用程序负载均衡器具有多个目标组。实例上的端口已注册到目标组。
似乎列出目标组中实例的唯一命令是describe_target_health()
,它返回实例和端口(因为一个实例可以提供多个目标):
{
'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 :(得分:2)
这是我的解决方案,我让它工作。谢谢约翰。
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 :(得分: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('[]')