mizoguche.info

EC2 のインスタンスを Itamae でプロビジョニングした

今までプロビジョニングツールには Chef 使ってた(使いこなせてなかった)。小規模なサーバーしか扱わないのでレシピ組み立てるのに HP がかなり必要だった。

軽量シンプル Chef ともっぱらの評判の、itamae-kitchen/itamae を使ってみた。

レシピの書き方

パッケージのインストール

package 'git gcc-c++ patch readline readline-devel zlib' do
  action :install
end

例によって、これで入る。

ファイルのアップロード

remote_file '/home/ec2-user/.bash_profile' do
  source 'bash_profile'
end

例によってこれで上がる。

Resources · itamae-kitchen/itamae Wiki にドキュメントが上がってないので、itamae/file.rb at master · itamae-kitchen/itamaeitamae/remote_file.rb at master · itamae-kitchen/itamae を見ながら使い方を確認した。

remote_file '/etc/sudoers' do
  source 'sudoers'
  mode 440
  owner root
  group root
end

こうすれば modeownergroupを設定できるので /etc/sudoers を上書きしても大丈夫(1回モードもオーナーもグループも設定せずに上書きして詰んだ)。

レシピのインクルード

rbenv のインストールに k0kubun/itamae-plugin-recipe-rbenv をつかった。

Gemfile で

gem 'itamae-plugin-recipe-rbenv'

としておいて、

include_recipe 'rbenv::system'

でいける。

コマンド実行

execute 'some command' do
  command 'command'
end

もしくは

execute 'command'

でもいけるっぽい。

not_if

execute 'some command' do
  command 'command'
  not_if 'test -d /path/to/dir'
end

で、/path/to/dir にディレクトリがないときに command が実行される。

not_if の exit code が 0 でないときに実行されるっぽい。

only_if を使うと逆。

実行

$ bundle exec itamae ssh -h default --vagrant recipes/default.rb -j recipes/node.json

で Vagrant とともに歩めそう。

bundle exec itamae ssh recipes/default.rb -j recipes/node.json -h <HOST> -i /path/to/key -u ec2-user -l debug

EC2にデプロイする時はこんな感じ。オプションの -u がユーザー、-i が秘密鍵のパス。あと、-ldebug を入れるとログがいっぱい出る。

pros/cons

pros

cons

印象

記法が Chef と変わらず、お手軽に使える軽量 Chef としてめちゃくちゃ使いやすい。

Chef の場合、偉い人が書いたレシピ使ってみてもすんなり動かへんことが多々ある。

っていうことを考えると、自分で書くのとコスト変わらん気がするので、レシピ書いて動かすコストが低い Itamae はかなりベターな選択肢である。

どこに何を置くか迷うけど、とりあえず動かせるので適当に置いといたらプロビジョニング始めれる。規模が大きくなった時にどこに何置くか考えれば良さそう。

Chef を使用している小規模サーバー管理者は今すぐに Itamae を使うと幸せになれそう。