トップ «前の日記(2012/03/04 (日) ) 最新 次の日記(2012/03/06 (火) )» 編集 RSS feed

HsbtDiary


2012/03/05 (月) [長年日記]

[heroku] heroku でプロセスを時間で変更する heroku_scale_scheduler という gem を作った

heroku でプロセスを時間帯で増やしたり減らしたりを人手を介さずにやりたくて heroku を色々調べていたんだけど、以下のコードでプロセスの数を変更できるみたい

client = Heroku::Client.new(*Heroku::Auth.read_credentials)
client.ps_scale(app_name, :type => process_name, :qty => process_count)

ちなみに Heroku::Auth.read_credentialsHEROKU_APU_KEY という環境変数が設定されていればそれを使い、無い場合は .netrc に書いてある heroku のログイン情報を使う。なので、heroku にデプロイしているアプリ自身が heroku gem を使うような場合は heroku config で API キーを設定するのが良いんだろうね。

で、この辺の情報を使って作ったのが heroku_scale_scheduler なのであった。今のところ Rails でしか使うつもりが無いので railtie とかにがっつり依存してるけど、使い方は

  1. heroku_scale_scheduler を Gemfile に書く
  2. rails g heroku_scale_scheduler:install を実行
  3. 作成されたheroku_ps.yml にプロセスの数を変更したい時間を書く、heroku の scheduler アドオンを使って制御するので、変更時間の間隔は10分単位で書く(この辺が凄ください)
  4. heroku に scheduler アドオンを追加して 10 分置きに heroku:scale:ps を実行するようにする
  5. heroku に git push する。

一応、bomboo スタックにも対応していてその時は dynos や workers という決めうちのプロセス名を記載して使う。まだ実験的な物だけど、興味のある人は使ってみてください。