2011年7月31日日曜日

qpstudy07 本当にあった怖い話 ~絶対に笑えないサーバ24時~に参加してきた

という夢を見た。。。

私は何も、誰も見てないし、何も覚えてない。
 
仮に覚えていても、身の安全の為にブログに書く事は出来ないw

2011年7月29日金曜日

RackspaceのサーバをChef(knife-rackspace)から使ってみる

なんか頻繁に更新とかするとちょっと不思議な感じがしますね。
昨日書いたブログ1周年の感想はともかく、今回もRackspaceの作業記録ネタです。
今回の主役となるChefや、Puppetというソフトウェアは以前から聞いてましたが、正直あまりさわれていませんでした。

Chefについては色々な方が情報提供しているので、ここではChefを使ってRackspaceのCloudServersを操作するログだけ記録しておこうと思います。
なんかChefを使ってAWSって話は誰かが?(汗)書くようです。
ちなみにChef0.10.0からknife-rackspaceというプラグインを使用する事になったみたいなので忘れずに入れて下さいね。

Chefってなんぞ!?という方は以下のリンクが参考になるのではないでしょうか。
ちなみに私のChefサーバはOpscodeのSaaSを使用させて頂いております。
ネットワーク構成を本番に近い形にも出来るし、何しろChefサーバを運用しなくて良いのは素敵ですもんね。
※アナタそういうサーバ運用するのがお仕事でしょっ!ていう突っ込みは割愛して下さいね(笑)

以下、作業記録です。

1)knife-rackspaceのインストール

Chefとknife-rackspaceをMacBookにインストールするのは簡単でしたよ。
  1. $ sudo gem install chef  
  2. $ sudo gem intalll knife-rackspace  

2)Cloud Serversをknifeコマンドで操作する為にAPIの設定

APIの情報を以下のように設定します。
  1. $ vim .chef/knife.rb  
  2.  18 # Rackspace  
  3.  19 knife[:rackspace_api_key] = "**************************"  
  4.  20 knife[:rackspace_api_username] = "okochang"  

3)Rackspaceへの接続確認

使用出来るサーバイメージをリストで表示します
  1. $ knife rackspace image list  
  2. ID                                        Name                                     
  3. 7319825                                   20101223develop-server                   
  4. 55                                        Arch 2010.05                             
  5. 187811                                    CentOS 5.4                               
  6. 51                                        CentOS 5.5                               
  7. 4                                         Debian 5.0 (lenny)                       
  8. 53                                        Fedora 13                                
  9. 71                                        Fedora 14                                
  10. 19                                        Gentoo 10.1                              
  11. 41                                        Oracle EL JeOS Release 5 Update 3        
  12. 40                                        Oracle EL Server Release 5 Update 4      
  13. 14                                        Red Hat Enterprise Linux 5.4             
  14. 62                                        Red Hat Enterprise Linux 5.5             
  15. 49                                        Ubuntu 10.04 LTS (lucid)                 
  16. 69                                        Ubuntu 10.10 (maverick)                  
  17. 10                                        Ubuntu 8.04.2 LTS (hardy)                
  18. 14362                                     Ubuntu 9.10 (karmic)                     
  19. 23                                        Windows Server 2003 R2 SP2 x64           
  20. 29                                        Windows Server 2003 R2 SP2 x86           
  21. 28                                        Windows Server 2008 R2 x64               
  22. 58                                        Windows Server 2008 R2 x64 - MSSQL2K8R2  
  23. 24                                        Windows Server 2008 SP2 x64              
  24. 57                                        Windows Server 2008 SP2 x64 - MSSQL2K8R2  
  25. 31                                        Windows Server 2008 SP2 x86              
  26. 56                                        Windows Server 2008 SP2 x86 - MSSQL2K8R2  
指定可能なサーバのスペックの一覧表示します
  1. $ knife rackspace flavor list  
  2. ID             Name           Architecture   RAM            Disk           Cores         
  3. 1              256 server     64-bit         256            10 GB          0.125         
  4. 2              512 server     64-bit         512            20 GB          0.25          
  5. 3              1GB server     64-bit         1024           40 GB          0.5           
  6. 4              2GB server     64-bit         2048           80 GB          1.0           
  7. 5              4GB server     64-bit         4096           160 GB         2.0           
  8. 6              8GB server     64-bit         8192           320 GB         4.0           
  9. 7              15.5GB server  64-bit         15872          620 GB         8     

4)起動確認=>レシピ適用=>削除

Cloud Serversのサーバを起動し、apache2のレシピを適用します
  1. $ knife rackspace server create -r 'recipe[chef-client], recipe[apache2]' --server-name server01 --node-name web01 --image 49 --flavor 1  
起動したサーバは一覧で表示出来ます
  1. $ knife rackspace server list  
  2. ID                        Name                      Public IP                 Private IP                Flavor                    Image                     State                    
  3. 20026242                  server01                  50.57.83.233              10.182.1.186              256                       Ubuntu 10.04 LTS (lucid)  active         
削除もknifeコマンドで実行出来ます
  1. $ knife rackspace server delete 20026242  
  2. Instance ID: 20026242  
  3. Host ID: c78b66aaae9d2f3fca9b957a46e800b6  
  4. Name: server01  
  5. Flavor: 256 server  
  6. Image: Ubuntu 10.04 LTS (lucid)  
  7. Public DNS Name: 50-57-83-233.static.cloud-ips.com  
  8. Public IP Address: 50.57.83.233  
  9. Private IP Address: 10.182.1.186  
  10.   
  11.   
  12. Do you really want to delete this server? (Y/N) y  
  13. WARNING: Deleted server 20026242 named server01  
以上のように管理画面にログインする事なくknifeコマンドから操作出来ます。
Chefに慣れた人にとっては良い運用の選択肢になりそうです。
以前このブログで書いたcloudlbcloudsrversとかと組み合わせると、さらに面白そう!

Rackspaceのロードバランサは外部のサーバも分散先に登録出来ます。
Chef経由でバランシング対象のRackspaceのサーバとEC2インスタンスに同じレシピを適用するなんて事も出来ますね。

あー、Rackspaceのデータセンターが日本にも出来ないかなー。出来ないだろなー。
Rackspaceを使って動く素敵なサービスは日本でもたくさん使われてるのになー。

2011年7月27日水曜日

ブログはじめて一周年を迎えた感想

7月前半でどうやらブログが1周年になった事に気付きました。
かなり思いつきで初めたブログなので振り返る事もありませんでしたが、せめて感想を残そうかと。
更新頻度は少ないけど、個人ブログを書く事についてネガティブに思った事はないから良かっ事だけのまとめ。
  1. 自分で調べた事の保存先として結構良い
    • 誰かが見る可能性があるので、それなりに奇麗にまとめる→自分の理解につながる
    • 以前は自分だけのWikiとか作ってみたけど、まったく更新しなくなってしまった
  2. ブログを書かなきゃ!ネタないかな?って気持ちから新しい技術に触れるきっかけになる事もある
  3. アクセス統計とかを見てると、こういうのがみんな興味あるのかって面白かったり
  4. 何かにのっかるのではなくゼロからブログやるって事自体が面白かった
  5. 自分個人だけで更新する事の楽しみとかもあったかも
意見を発する場とよりも自分が作業したログをまとめる場所としてやっているので、こんな感じです。
普段いろいろなブログ記事に助けられているので、感謝の気持ちはもちろんいっぱいです。
ただ、私がブログをするのは、まず自分の為、見てくれた人の参考になるかどうかは副産物みたいなもの。
一年後にこのブログがないかもしれないし、その時は思う事も変わってるでしょう。
最初から大風呂敷なんて広げない。それだけでやる理由としては十分ありそうなので、継続しよう。

※お酒を飲みながら書いてるもんですから、いろいろな部分をご容赦下さいw

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版がリリースされるのが楽しみです。

2011年7月20日水曜日

EBSボリュームのスナップショットを自動作成する(right_aws)

相変わらず、久しぶりの更新となりました。

先日、AWSからRuby用のSDKがリリースされて、喜び半分right_awsを触りだしたばかりの私はアイタタという気持ちが正直なところです。
今回のエントリは"Ruby用のaws-sdkについて"と言いたいところですが、right_awsを使用したスクリプトについてです。

AWSのEBSからスナップショット取得するのですが、個人的にジョブが完了したらメールで通知して欲しい人です。
@dateofrokさんが公開されているこちらのブログを参考に、メール通知機能を追加しています。

正直、Rubyなんて触った事ないし、プログラミングもした事ないので変なところは多々あると思います。
公開する事で誰かがより良いものを作り、回り回って自分に何かの形で返ってくると良いな〜なんて思ってるわけです。

◆EBSボリュームからスナップショットを作成するスクリプト



作っていて感じた今後の改善点は以下のような感じ。
  • 複数ボリュームのスナップショット対応
  • aws-sdkを使って書き直したい
  • 多分もっと良い感じにかけるんだろう