ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2011年11月30日水曜日

RDSの自動停止、自動起動スクリプト(right_aws)を作る











前回から一ヶ月以上経過していて相変わらずブログの更新が滞り気味ですが、引っ越しなどをしていた訳です。
ちなみに、引越で一番大事にしたポイントはPC作業を行うための机と椅子これに限ります!

3月11日から数日は自宅でお仕事をしていたのですが、ちゃぶ台にPCとか腰が爆発しちゃいます(汗)
家で仕事したいわけじゃないですが、ブログ書いたり勉強したりする時には重宝しますよねー。
こうしてブログを書いている今も机と椅子のありがたさを実感しております。
そんな訳でこれからはブログの更新頻度がアップしないとかしないとか(汗)

今回もAWSネタなのですがRDSを使っているとどうしても一時停止が出来ない事に不便さを感じますよね。
RDSを使ってる方は既に同様の事をしているかと思いますが、私もスナップショットとリストアを組み合わせた停止/起動スクリプトを作ってみました。
パッと思いつく自動化したいポイントは以下のとおりです
  • RDSのスナップショットを作成した上での停止
  • 最新のスナップショットからの起動
  • スナップショットからRDSをリストアした時にセキュリティグループを割り当て
  • スナップショットからRDSをリストアした時にパラーメタグループを割り当て

※cronとかに登録すれば起動中、停止中を判断して自動で起動したり停止したりします。
※AWSSDK for Rubyを使いたかったのですが、RDSに未対応なのでright_awsを使っています


指定するパラーメタグループはMySQLのバージョンと合わせないとエラーになってしまいます。
また、現状ではスナップショットを削除する処理が入っていません。
入れた方が便利かなと思いつつ、どんな条件で削除するか悩み中。
スナップショットが特定の数以上になったら余分な数を消すって感じが一番事故がなさそうか。。。

ただ作っておいてなんですが、
そのうちRDSで停止がサポートされてこんなスクリプト必要なくなるんだろうなー。

2011年9月20日火曜日

httpclient(ruby)によるログインチェックとyammerへの投稿

先日とあるサーバが不調になりました。
死活監視はしていたのですが、それだけでは満足な状況が把握出来なくなってしまったので、指定時間内にログインが完了するかチェックするスクリプトを急遽作ってみました。
早くビールが飲みたかったので状況をいち早くメンバーと共有するため、スピードと動く事を優先したスクリプトになってしまっていたので少しだけ整理しました。
当初はcurlでログインしてmailコマンドでローカルから、警告を出力すれば良いと安易に考えていたのですが…。
テストをするうちに以下のようなポイントが分かりました。
  • 失敗時のみアラート通知し、メールでyammerに投稿したい
  • yammerに投稿する場合、登録しているドメインからのみメール投稿が可能
  • アラートメッセージが同じないようだと、重複投稿としてyammerに拒否される
また、事前にyammerのアカウント設定>通知>メールでの投稿で承認しなくても投稿出来るようにしておきます。








そんな訳で以下がスクリプトです。
httpclient、tmail、tlsmailを使用しているのであらかじめgemでインストールしておいて下さい。
※ruby1.8.7で動作確認しています
実行権限与えてからcronに登録して完了。

2011年7月24日日曜日

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

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

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

インストールはgemのソースとしてGithubが登録されていればとても簡単です。
$ sudo gem sources -a http://gems.github.com
$ sudo gem install cloudlb
Fetching: typhoeus-0.2.4.gem (100%)
Building native extensions.  This could take a while...
Fetching: cloudlb-0.0.1.gem (100%)
Successfully installed typhoeus-0.2.4
Successfully installed cloudlb-0.0.1
2 gems installed
Installing ri documentation for typhoeus-0.2.4...
Installing ri documentation for cloudlb-0.0.1...
Installing RDoc documentation for typhoeus-0.2.4...
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
さて、それでは確認してみます。
$ irb
# cloudlbを読み込みます
> require 'rubygems'
> require 'cloudlb'

# Rackspaceへの認証とリージョンの選択をします
> lb = CloudLB::Connection.new(:username => "okochang", :api_key => "*****************", :region => :ord)

# LBに追加するWebサーバ用にハッシュの配列を作成します
> node01 = [{ :address => "50.57.116.195", :port => "80", :condition => "ENABLED" }]

# LBを作成して先ほど作成したノードを作ります
> newlb = lb.create_load_balancer( :name => "newlb", :protocol => "HTTP", :nodes => node01, :algoristhm => "LEAST_CONNECTIONS", :virtual_ip_type => "PUBLIC" )

# LBのリストを参照して確認を行います(きちんとIPv6用のアドレスも割り当てられてるのも分かります)
> lb.list_load_balancers
=> [{: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"}}]

# 先ほど出力されたIDを指定して、LBを選択します
> balancer = lb.get_load_balancer(13924)

# LBのバランシングアルゴリズムを変更します
> balancer.algorithm="ROUND_ROBIN"
=> "ROUND_ROBIN"

# 新しいWebサーバをLBのノードとして追加します
> node02 = balancer.create_node(:address => "50.57.116.80", :port => "80")

# テストが終わったのでLBを削除します
> balancer.destroy!
=> 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を使って書き直したい
  • 多分もっと良い感じにかけるんだろう