代表的な構成管理ツールの1つであるItamaeを用いることで、シンプルにサーバを開発することができます。 この記事では、VagrantとServerspecを用いて、開発〜テストまでを行なう手順について解説します。
動作環境
この記事で解説する内容は、以下のバージョンにて動作を確認しています。
- Itamae v1.9.6
- Vagrant v1.8.1
- Serverspec v2.35.0
開発の流れ
Itamaeを用いて開発を行なう流れは次のとおりです。 環境を構築する手順についても、以下にしたがって説明していきます。
- Itamaeでインフラを開発する
- Vagrant(仮想環境)に適用する
- Serverspecでテストする
ディレクトリ構成
今回は、例として「ユーザを作成する」ための手順を書いていきます。 その際のディレクトリ構成は、以下のようになります。
$ tree
.
├── Gemfile
├── Gemfile.lock
├── Rakefile
├── Vagrantfile
├── cookbooks
│ └── user
│ └── default.rb
├── nodes
│ └── development.json
├── roles
│ └── web.rb
└── spec
├── default
│ └── user_spec.rb
└── spec_helper.rb
手順
1. インストールする
まず、必要なGemをインストールします。
bundle initでGemfileを作成した後で以下を追記し、bundle installします。
Gemfile:
gem 'itamae'
gem 'itamae-secrets' # 機密情報を管理する場合
gem 'serverspec'
2. レシピを実装する
今回は、例として「ユーザを作成する」レシピを実装します。 以下にしたがってファイルを作成します。
cookbooks/user/default.rb:
user node[:user][:id] do
action :create
end
nodes/development.json:
{
"user": {
"id": "kami"
}
}
roles/web.rb:
recipes = %w(
user
)
recipes.each do |recipe|
include_recipe "../cookbooks/#{recipe}/default.rb"
end
3. Vagrantの準備をする
Vagrantを立ち上げるための設定ファイルを作成します(Vagrant自体の導入は省略します)。
以下のコマンドで、CentOS 6.7のボックスを指定したVagrantfileを生成します。
ファイルの修正は特に必要ありません。
$ vagrant init bento/centos-6.7
4. Vagrantを立ち上げる
以下のコマンドで、Vagrantを立ち上げます。
$ vagrant up
5. Itamaeを適用する
それでは、実装したレシピをVagrantに適用します。 以下のコマンドで適用できます。
$ bundle exec itamae ssh --vagrant -j nodes/development.json roles/web.rb
6. テストの準備をする
まず、Serverspecを実行するための初期設定を行ないます。
serverspec-initコマンドを実行し、以下に従って入力します。
$ serverspec-init
Select OS type:
1) UN*X
2) Windows
Select number: 1
Select a backend type:
1) SSH
2) Exec (local)
Select number: 1
Vagrant instance y/n: y
Auto-configure Vagrant from Vagrantfile? y/n: y
上記コマンドを実行すると、いくつかのファイルが生成されます。
7. テストを書く
今回は例としてユーザを追加しましたので、「正しくユーザが作成されたかどうか」をテストします。 Serverspecのリソース一覧に従って、以下のように実装します。
spec/default/user_spec.rb:
require 'spec_helper'
describe user('kami') do
it { should exist }
end
8. テストを実行する
それではテストを実行してみます。
rake specコマンドでテストを実行します。
$ rake spec
User "kami"
should exist
Finished in 0.43756 seconds (files took 6.04 seconds to load)
1 example, 0 failures
9. .gitignoreを更新する
Vagrantを立ち上げると、.vagrantというディレクトリが作成されます。
これをGitに含めないよう設定しておきます。
.gitignore:
/.vagrant
備考
機密情報を管理する
Itamaeでパスワードなどの機密情報を管理する場合、itamae-secretsを利用します。 決して生の情報をリポジトリに含めないよう注意しましょう。
レシピを試行錯誤する
ItamaeとVagrantで試行錯誤しながらレシピを開発する場合、Saharaというプラグインが便利です。 ひとことでいうと、レシピを適用する前の状態を保存し、いつでもその状態にロールバックできます。
Itamaeで開発する際は、ぜひ導入しましょう。
おわりに
Itamaeを用いてサーバを一度開発しておくことで、いろんなシーンで活用できると思います。 インフラ開発の際は、ぜひ参考にしてみてください。