第8弾 週末ランサーズ「Infrastructure as Code」 ~ ハンズオン手順 ~
本来なら Ansible を題材にしたいところですが、Ansible の実行環境を整えるのは環境依存のところもあってちょっと手間がかかるので、今回は Chef をとりあげます。
Chef を実行するために便利なプラグイン 'vagrant-omnibus' をインストールします。これは、VM 上に Chef の環境をインストールしてくれるものです。
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin list
vagrant-omnibus (1.4.1)
※:2014/05/24 現在、nokogiri関連の問題で、うまくインストールできないかもしれません。その場合、下記を実行後再度インストールを試してください。
(sudo) gem install nokogiri -v '1.6.2.1'
export NOKOGIRI_USE_SYSTEM_LIBRARIES=true
vagrant-omnibus, Chef Solo, IP アドレスの設定を追加します。
- Vagrantfile
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode_centos-6.5"
config.vm.network "private_network", ip: "192.168.33.10"
config.omnibus.chef_version = :latest
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "cookbooks"
chef.add_recipe "httpd"
end
end
用意していた設定では、httpd をインストールするようになっています。プロビジョニングしてみましょう。
$ vagrant up
# Chef が実行されなかった場合、明示的に実行する
$ vagrant provision
Chef 実行時、下記のような警告メッセージが出るかもしれませんが、ひとまず無視して構いません。
==> default: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
==> default: SSL validation of HTTPS requests is disabled. HTTPS connections are still
==> default: encrypted, but chef is not able to detect forged replies or man in the middle
==> default: attacks.
==> default:
==> default: To fix this issue add an entry like this to your configuration file:
==> default:
==> default: ```
==> default: # Verify all HTTPS connections (recommended)
==> default: ssl_verify_mode :verify_peer
==> default:
==> default: # OR, Verify only connections to chef-server
==> default: verify_api_cert true
==> default: ```
==> default:
==> default: To check your SSL configuration, or troubleshoot errors, you can use the
==> default: `knife ssl check` command like so:
==> default:
==> default: ```
==> default: knife ssl check -c /tmp/vagrant-chef-3/solo.rb
==> default: ```
==> default:
==> default: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
実際に httpd がインストールされたかを、VM に接続して確認します。
$ vagrant ssh
インストールはされているけど、まだ起動していない状態です。
$ sudo service httpd status
httpd is stopped
インストールと合わせて、自動起動するように設定してみましょう。以下を追加してみてください。
- cookbooks/httpd/recipes/default.rb
yum_package "httpd"
service "httpd" do
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
$ vagrant provision
実行後、割り当てておいた IP アドレスの http://192.168.33.10/ にアクセスしてみます。Apache のデフォルトページが見えていれば成功です。
いったん VM を破棄して、再度構築してみます。VM の初回起動時には、プロビジョニングも合わせて実行されます。
$ vagrant destroy
$ vagrant up
実行後 http://192.168.33.10/ に再度アクセスしてみると、上記と同様にデフォルトページが表示されると思います。
Vagrant のプラグインは色々ありますが、saharaプラグインはオススメ。SNAPSHOT を取るためのコマンドを提供してくれるので、Vagrant 上での試行錯誤がやりやすくなります。
$ vagrant plugin install sahara