【问题标题】:Ruby calling AWS ELB functionsRuby 调用 AWS ELB 函数
【发布时间】:2012-03-29 20:58:28
【问题描述】:

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

不确定这是否是正确的方法,但非常欢迎任何有关如何完成此操作的建议。

【问题讨论】:

    标签: ruby amazon-web-services amazon-elb


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      参考资料:

      【讨论】:

      • 感谢您,这将非常有用。我的主要问题是如何从控制台捕获输出,以便我可以使用它。我最初发布的命令的结果转储到屏幕上。我怎样才能抓住它们,以便我可以操纵文本。
      • @user859610:你是说elb-describe-instance-health 不会打印到标准输出?
      • 啊,抱歉。我误解了你的建议,确实效果很好。再次感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2016-10-05
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多