開発サーバに chef を入れるときの 11の方法
タイトルは釣りです。11個もやり方をしらないまま書き始めます。
最近 chef が流行っていますが、みなさんどうやって各サーバに chef をインストールしていますか?
ここでは僕がいままで紆余曲折していた方法を紹介します。
列挙だけするとこんな感じです。
- vagrant の VM イメージに入っているもの
- omnibus installer を使う
- knife solo を使う
- OS の ruby 環境に chef を入れる
- RVM 環境を作って chef を入れる
- rbenv 環境を作って chef を入れる
- roundsman を使って chef を入れる
vagrant の VM イメージに入っているもの
vagrant の VM イメージには、大抵 ruby と chef がインストールされています。
veewee を使ってあたらしい VM イメージを作成すると必ずインストールされていますね。
vagrant provision コマンドなどを使うとこの方法になりますね。
メリットは
- 準備がいらないということ
デメリットは
- VM に入っている chef は大抵古い。バージョンアップは手動でやる必要がある
- vagrant 以外の環境で chef を使う場合に、他のやり方を取る必要がある
というものです。
様々な実験を行うにはお手軽な方法なのですが、実環境(本番系)に入れようと思うと別の方法を探さなくてはならず、
最終的に僕はこの方法は利用していません。
omnibus installer を使う
chef omnibus installer は curl さえあれば chef 環境を作ることができます。
ruby も同梱されているので、何も考えずに使いはじめることができます。
rpm や deb などの形式でも配布されているので、あらかじめダウンロードするのであれば curl すら必要ありません。
また、/opt/chef にインストールされるため、他のプログラムに影響を及ぼさずに使いはじめることができます。
メリットは
- お手軽簡単
- 環境を選ばない
デメリットはあまりないのですが、強いてあげると
- ruby のプログラムをデプロイする場合は別途 ruby を入れる必要がある
- omnibus installer を実行する方法を考える必要がある (なるべくログインしたくない)
- chef-solo 使いの場合は実行方法を別途考える必要がある
というものです。
バランスのとれた方法だと思います。
knife-solo を使う
id:naoya さんの記事ではじめて知ったのですが、knife-solo というものがあります。
knife-solo を入れて
$ knife solo prepare
とするだけで chef omnibus installer を実行して chef をインストールしてくれます。
また、chef-solo のリモート実行を行うこともできるので、運用の際にも便利です。
メリットは
- インストールがかんたん
- 環境を選ばない
- chef-solo の実行もできる
デメリットはほとんどありません。やはり強いて挙げるとすれば
- 複数台になった場合に、それぞれに実行する必要がある
といったところです。
非常に便利だと思います。
OS の ruby 環境に chef を入れる
Linux の場合だと distro. に ruby のパッケージが存在するので、ログインして
$ sudo apt-get install ruby $ sudo gem install chef
として chef を使いはじめるというものです。
メリットは
- 結構簡単
デメリットは
- ruby が古くて切ない
- 手動で作業しないといけない
- chef-solo 使いの場合は実行方法を別途考える必要がある
一時期試していましたが、すぐに挫折しました。
RVM 環境を作って chef を入れる
RVM で ruby をビルドして、chef を入れるパターンです。
以前説明した rvm-capistrano などを使えば、RVM と Ruby のインストールには手間をかけずに済みます。
また、capistrano で
task :install_chef do run "gem install chef" end after 'deploy:setup', 'install_chef'
などと設定すれば、chef のインストールも rvm-capistrano とセットで行うことができます。
メリットは
- あたらしい Ruby を使うことができる
- 自動化可能
- 複数のホストに対して同時にインストールを実行できる
デメリットは
- capistrano (他)が使えないと手間が発生
- Ruby のビルドが発生する。RHEL 5.x系だと EPEL のお世話になったり…
- chef-solo 使いの場合は実行方法を別途考える必要がある
rbenv 環境を作って chef を入れる
rbenv で ruby をビルドして、chef を入れるパターンです。
この記事で紹介した capistrano-rbenv などを使えば、rbenv と Ruby のインストールには手間をかけずに済みます。
先ほどの rvm と同様の方法で chef のインストールまで済ませることができます。
メリット・デメリットは RVM と変わりません。
どちらの ruby マネージャが好みかによって、どちらを選んでも良いのではないかと思います。
roundsman を使って chef を入れる
最後は僕が今使っている方法です。
roundsman という capistrano のプラグインを利用して chef をインストールします。*1
ruby を入れる部分は前述の rvm-capistrano や capistrano-rbenv を利用します。
roundsman を使うと chef-solo をリモート実行することができます。
利用する際は config/deploy.rb に chef タスクを定義してあげます。
set :run_list, [...] namespace :chef do task :default do roundsman.run_list fetch(:run_list) end end
あとは chef タスクを実行する際に(必要があれば) chef のインストールを行なってくれます。
メリットは
- chef-solo の実行まで面倒を見てくれる
- 複数ホストでの実行ができる
デメリットは
- chef-client を使う場合は必要ない
という感じなので、みなさん roundsman を使って幸せに過ごしましょう(結論)。
ちなみに capistrano-rbenv と組み合わせて使う部分はまだマージされていません。
この pull request を取り込む必要があるのでご注意ください。
書き始めたら 7個もありました。いままで紆余曲折した甲斐があったかもしれません。
*1:rubygems.org をさまようと、capistrano を利用して chef-solo を実行するプラグイン/方法は他にも大量に存在します。