Ruby调用AWS ELB函数



我正在编写一些Ruby脚本来包装AWS ELB命令行调用,主要是为了同时对几个ELB实例进行操作。一项任务是使用ELB -describe-instance-health调用查看附加到此ELB的实例id。

我想将实例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。基本上,我试着让每一行返回,把它变成一个数组,得到第二个字段,然后我可以用它来查找我们的服务器昵称。

我不确定这是不是正确的方法,但是我非常欢迎任何关于如何完成这项工作的建议。

新发布的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'] }

提取第二列的简单方法如下:

ids = value.split("n").collect { |line| line.split(/s+/)[1] }

这将在数组ids中保留第二列的值。这所做的就是将value分成几行,将每行分成用空格分隔的列,然后提取第二列。

对于这样的事情,可能没有必要太聪明,一个简单直接的解决方案就足够了。

引用:

  • collect
  • split

相关内容

  • 没有找到相关文章

最新更新