2011年7月24日日曜日

Rackspace:Cloud Load BalancersをRubyからさわってみる

こんばんわ。
本日からアナログ放送が終了して、家でテレビが見れなくなってしまいました。
しかし、珍しく一ヶ月以内に更新が出来きたので今日は気分が良いです。

前回のブログでは珍しくAWSでしたが、今回は再びRackspaceネタ。
以前書いた、Cloud Load BalancersではCloud Serversと同様にPythonとRubyのインターフェースが提供されています。
Cloud Serversの時と同様にREADMEを参考に少しだけ使ってみました。
※ほとんどまんまですw

インストールはgemのソースとしてGithubが登録されていればとても簡単です。
  1. $ sudo gem sources -a http://gems.github.com  
  2. $ sudo gem install cloudlb  
  3. Fetching: typhoeus-0.2.4.gem (100%)  
  4. Building native extensions.  This could take a while...  
  5. Fetching: cloudlb-0.0.1.gem (100%)  
  6. Successfully installed typhoeus-0.2.4  
  7. Successfully installed cloudlb-0.0.1  
  8. 2 gems installed  
  9. Installing ri documentation for typhoeus-0.2.4...  
  10. Installing ri documentation for cloudlb-0.0.1...  
  11. Installing RDoc documentation for typhoeus-0.2.4...  
  12. Installing RDoc documentation for cloudlb-0.0.1...  

動作確認した環境はMac OS X (not Lion)にインストールされたRuby 1.8.7です。
irbを使用して作業は行い、テスト用に起動したサーバのIPアドレスは以下の通りです。
  • 50.57.116.195
  • 50.57.116.80
さて、それでは確認してみます。
  1. $ irb  
  2. # cloudlbを読み込みます  
  3. > require 'rubygems'  
  4. > require 'cloudlb'  
  5.   
  6. # Rackspaceへの認証とリージョンの選択をします  
  7. > lb = CloudLB::Connection.new(:username => "okochang", :api_key => "*****************", :region => :ord)  
  8.   
  9. # LBに追加するWebサーバ用にハッシュの配列を作成します  
  10. > node01 = [{ :address => "50.57.116.195", :port => "80", :condition => "ENABLED" }]  
  11.   
  12. # LBを作成して先ほど作成したノードを作ります  
  13. > newlb = lb.create_load_balancer( :name => "newlb", :protocol => "HTTP", :nodes => node01, :algoristhm => "LEAST_CONNECTIONS", :virtual_ip_type => "PUBLIC" )  
  14.   
  15. # LBのリストを参照して確認を行います(きちんとIPv6用のアドレスも割り当てられてるのも分かります)  
  16. > lb.list_load_balancers  
  17. => [{:status=>"ACTIVE", :created=>{:time=>"2011-07-24T12:47:23Z"}, :port=>80, :virtualIps=>[{:type=>"PUBLIC", :address=>"184.106.100.221", :ipVersion=>"IPV4", :id=>168}, {:type=>"PUBLIC", :address=>"2001:4801:7901:0000:d4dc:6dbb:0000:0001", :ipVersion=>"IPV6", :id=>9000572}], :protocol=>"HTTP", :name=>"newlb", :id=>13924, :algorithm=>"RANDOM", :updated=>{:time=>"2011-07-24T12:48:12Z"}}]  
  18.   
  19. # 先ほど出力されたIDを指定して、LBを選択します  
  20. > balancer = lb.get_load_balancer(13924)  
  21.   
  22. # LBのバランシングアルゴリズムを変更します  
  23. > balancer.algorithm="ROUND_ROBIN"  
  24. => "ROUND_ROBIN"  
  25.   
  26. # 新しいWebサーバをLBのノードとして追加します  
  27. > node02 = balancer.create_node(:address => "50.57.116.80", :port => "80")  
  28.   
  29. # テストが終わったのでLBを削除します  
  30. > balancer.destroy!  
  31. => true  
CloudServers同様に、API経由でもなかなか簡単に操作出来るのですね。
RackspaceのGithubのリポジトリを眺めていると、どうやら先日ベータリリースされたCloud DNSのPythonインターフェースは既に存在してるみたい。
Ruby版がリリースされるのが楽しみです。