1

AWS ELB コマンドライン呼び出しをラップする Ruby スクリプトをいくつか書いています。これは主に、複数の ELB インスタンスを同時に操作できるようにするためです。1 つのタスクは、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 のインスタンスごとに 1 行が表示されます。各フィールドの間には 2 つのスペースがあります。

取得する必要があるのは、実際のインスタンス ID である 2 番目のフィールドです。基本的に、返される各行を取得して配列に変換し、2 番目のフィールドを取得して、サーバーのニックネームを検索するために使用しようとしています。

これが正しいアプローチかどうかはわかりませんが、これを実現する方法についての提案は大歓迎です。

4

2 に答える 2

3

新しくリリースされたaws-sdkgemは、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'] }
于 2011-10-06T02:41:17.383 に答える
1

2番目の列を抽出する簡単な方法は、次のようになります。

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

これにより、2番目の列の値が配列に残りidsます。これは、valueを行に分割し、各行を空白で区切られた列に分割してから、2番目の列を抽出するだけです。

おそらく、このようなことに対して賢くなりすぎる必要はありません。単純で単純な解決策で十分です。

参照:

于 2011-07-23T19:18:02.797 に答える