Vagrant+CentOS ゲストOS内にItamae をセットアップする

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を読むとレシピを簡略化して記述する方法が書いてありますので、見やすいレシピを書くなら必見です。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ