我正在编写一些Ruby脚本来包装AWS ELB命令行调用,主要是为了让我可以同时对多个ELB实例执行操作。一个任务是使用elb-describe-instance-health调用来查看哪个实例ID附加到此ELB。
我希望将Instance ID与我们为这些实例设置的昵称相匹配,以便我可以一目了然地看到连接到ELB的机器区域,而无需查找实例名称。
所以我发出了:
cmd = "elb-describe-instance-health #{elbName}"
value = `#{cmd}`
将elb名称传递给呼叫。这将返回输出,如:
INSTANCE_ID i-jfjtktykg InService N/A N/A
INSTANCE_ID i-ujelforos InService N/A N/A
ELB中的每个实例都会显示一行。每个字段之间有两个空格。
我需要得到的是第二个字段,它是实际的实例ID。基本上我试图让每一行返回,把它变成一个数组,得到第二个字段,然后我可以用来查找我们的服务器昵称。
不确定这是否是正确的方法,但是非常欢迎任何有关如何完成此操作的建议。
答案 0 :(得分:3)
新发布的aws-sdk gem支持Elastic Load Balancing(AWS :: ELB)。如果要获取附加到负载均衡器的实例ID列表,可以执行以下操作:
AWS.config(:access_key_id => '...', :secret_access_key => '...')
elb = AWS::ELB.new
intsance_ids = elb.load_balancers['LOAD_BALANCER_NAME'].instances.collect(&:id)
您还可以使用EC2存储您的实例昵称。
ec2 = AWS::EC2.new
ec2.instances['INSTANCE_ID'].tags['nickname'] = 'NICKNAME'
假设您的实例标有昵称,您可以像这样收集它们:
elb = AWS::ELB.new
elb.load_balancers['LOAD_BALANCER_NAME'].instances.collect{|i| i.tags['nickname'] }
答案 1 :(得分:1)