Vagrant+CentOS ゲストOS内にItamae をセットアップする
三大キャリアからIIJMioに切り替えたら、通信速度が気持ち遅めになり通信料が節約できてるtanakaです。
今回はVagrant + Itamae の話をします。ローカル開発環境を構築するときには Vagrant + vagrant-itamae プラグイン をよく使います。しかし自動化になれて Resource の数が増えてきて変更点がなくても10分以上かかることが多くなりました。
そこで仮想マシン内にItamae環境を作り、sshログイン後ローカルで itamae local
コマンドを実行する用にしたところ、10~20秒に短縮できましたので方法をご紹介します。
前提
プロジェクトのディレクトリにファイルは以下のように配置されているものとします。
├── Vagrantfile
└── itamae
├── recipe.rb
└── node.json
Vagrantfile に次のように書いています。
develop.vm.provision :itamae do |config|
config.sudo = true
config.recipes = File.join(__dir__, "itamae", "recipe.rb")
config.json = File.join(__dir__, "itamae", "node.json")
end
このとき、仮想マシン内にItamaeをインストールして、itamae実行が早くなるようにしましょう。
まずは普通にItamaeをインストールする
/var/itamae
にItamaeをインストールしましょう。
まず、仮想マシンにsshログインし、必要なパッケージをyumで入れます。
sudo yum install gcc rubygem-bundler ruby-devel
Itamae用ディレクトリを作成しGemfileを置きます。
sudo mkdir /var/itamae
sudo chown vagrant:vagrant /var/itamae
cd /var/itamae
vim Gemfile
/var/itamae/Gemfile
source 'https://rubygems.org'
gem 'json_pure'
gem 'json'
gem 'itamae'
ライブラリをインストールする
bundle install --gemfile=/var/itamae/Gemfile --path /var/itamae/vendor/bundle
同じ事をItamae Recipe化する
初回の vagrant up
時にItamaeインストール済みになるようにしましょう。
itamae/recipe.rb
以下の行を追加します。
#
# Itamae Setup
#
%w{gcc rubygem-bundler ruby-devel}.each do |pkg|
package pkg do
action :install
end
end
# 仮想マシン内Itamae環境ディレクトリ作成
directory '/var/itamae' do
action :create
mode '755'
owner 'vagrant'
group 'vagrant'
end
# Itamae Gemfile
remote_file '/var/itamae/Gemfile' do
source 'templates/itamae/Gemfile'
mode '644'
owner 'vagrant'
group 'vagrant'
end
# itamae インストール
execute "itamae インストール" do
command "sudo -u vagrant bundle install --gemfile=/var/itamae/Gemfile --path /var/itamae/vendor/bundle"
not_if "test -f /var/itamae/Gemfile.lock"
end
itamae/templates/itamae/Gemfile
source 'https://rubygems.org'
gem 'json_pure'
gem 'json'
gem 'itamae'
仮想マシン内でプロビジョニングを実行する
vagrant provision
でプロビジョニングしたときと同じことを仮想マシン内で実行するには以下のようにコマンドを実行します。
cd /var/itamae
sudo bundle exec itamae local /vagrant/itamae/recipe.rb --node-json=/vagrant/itamae/node.json
最後に
Itamaeのレシピを作成しているときにプロビジョニング時間短縮の恩恵があると思いますのでお試しください。 最近 recipe.rb が200行くらいになってきて、修正する行を探すのがつらくなりそうだったので、 クックパッドのサーバプロビジョニング事情 - クックパッド開発者ブログ に書いてある方法を使って "cookbook" に分割しています。またBest Practice · itamae-kitchen/itamae Wikiを読むとレシピを簡略化して記述する方法が書いてありますので、見やすいレシピを書くなら必見です。