Ruby вызывает функции AWS ELB - PullRequest
1 голос
/ 23 июля 2011

Я пишу несколько сценариев Ruby, чтобы обернуть вызовы командной строки AWS ELB, в основном, чтобы я мог одновременно работать с несколькими экземплярами ELB.Одна задача состоит в том, чтобы использовать вызов elb-description-instance-health для просмотра идентификаторов экземпляров, прикрепленных к этому ELB.

Я хочу сопоставить идентификатор экземпляра с псевдонимом, который мы установили для этих экземпляров, чтобы я мог сразу увидеть, какая область компьютеров подключена к ELB, без необходимости искать имена экземпляров.

Итак, я выдаю:

cmd = "elb-describe-instance-health #{elbName}"
value = `#{cmd}`

Передача имени эльба в вызов.Это возвращает вывод, такой как:

INSTANCE_ID  i-jfjtktykg  InService  N/A  N/A
INSTANCE_ID  i-ujelforos  InService  N/A  N/A

Одна строка появляется для каждого экземпляра в ELB.Между каждым полем есть два пробела.

Мне нужно получить второе поле, которое является фактическим идентификатором экземпляра.По сути, я пытаюсь вернуть каждую строку, превратить ее в массив, получить 2-е поле, которое затем могу использовать для поиска псевдонима нашего сервера.

Не уверен, что это правильный подход, но любые предложения о том, как это сделать, очень приветствуются.

Ответы [ 2 ]

3 голосов
/ 06 октября 2011

Недавно выпущенный гем aws-sdk поддерживает Elastic Load Balancing (AWS :: ELB). Если вы хотите получить список идентификаторов экземпляров, прикрепленных к вашему балансировщику нагрузки, вы можете сделать следующее:

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 голос
/ 23 июля 2011

Простой способ извлечь второй столбец будет выглядеть примерно так:

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

Это оставит значения второго столбца в массиве ids.Все, что это делает, разбивает value на строки, разбивает каждую строку на столбцы с пробелами и затем извлекает второй столбец.

Вероятно, нет необходимости пытаться быть слишком умным для чего-то подобного, простогои прямого решения должно быть достаточно.

Ссылки:

...