我几乎是AWS的新手。我试图列出未附加到任何实例的负载余额。我正在尝试使用aws cli描述负载均衡器但是无法获得过滤掉elbs的选项。
请提供一些有关如何实现这一目标的建议。
答案 0 :(得分:7)
假设您使用合适的密钥设置了aws cli,这一长串的shell应该列出ELB并附加一个实例计数。如果它显示为零则没有附加实例
for i in `aws elb describe-load-balancers|sed -ne 's/"LoadBalancerName": "\(.*\)",/\1/gp'`; do echo -n "$i "; aws elb describe-load-balancers --load-balancer-name $i|grep -c InstanceId;done
或者,这是一个boto3 python程序
import boto3
client=boto3.client('elb')
bals=client.describe_load_balancers()
for elb in bals['LoadBalancerDescriptions']:
count=len(elb['Instances'])
print "%s %d" % ( elb['LoadBalancerName'], count)
答案 1 :(得分:2)
我看到了上面的答案,并想使用jq
而不是Bash
或Boto
来设计答案。
以下示例将jq
与AWS cli结合使用。
此示例解决了OP最初尝试执行的操作-
列出未附加实例的ELB:
aws elb describe-load-balancers --output json |jq -r '.LoadBalancerDescriptions[] | select(.Instances==[]) | . as $l | [$l.LoadBalancerName] | @sh'
输出
'blah10-admin'
'elk-elb-nova'
'cj-web-elb'
此示例匹配接受的答案-
打印ELB名称和附加实例数:
aws elb describe-load-balancers --output json | jq -r '.LoadBalancerDescriptions[] | . as $l | (.Instances | length) as $i | [$l.LoadBalancerName] + [$i] | @sh'
输出
'blah10-admin'0
'elk-lb-cim-0'1
'demo-pod-01-es'1
'elk-elb-nova'0