はじめに
はじめまして。クックパッド株式会社の荒井
今回から全5回、
Itamaeとは
Itamaeは筆者が中心となって開発を進めているオープンソースの構成管理ツールです。同様のツールとしてはPuppet、
構成管理ツールの必要性
Itamaeの解説を始める前に、
- サーバ構築の自動化
- 手動構築の手間と時間を減らす
- 手動構築による人為的ミスの防止
- サーバの状態のコード化
- GitHub上でのPull Requestベースワークフローでのレビュー
- サーバの設定変更履歴の管理
- Serverspecなどのテストフレームワークによるテスト・
継続的インテグレーション
構成管理ツールを導入し、
Itamaeと他の構成管理ツール
Itamaeと他の構成管理ツールの違いを見てみましょう。まず、
Chefは柔軟で簡潔にサーバの状態を記述できますが、
このような背景で、
このようにItamaeは特別新しい概念・
インストール
では、
VirtualBox、Vagrantのインストール
Downloads – Oracle VM VirtualBoxからVirtualBoxをダウンロードしインストールします。その後、
Ruby、Itamaeのインストール
まずVagrantを利用して仮想マシンを起動します。
$ mkdir itamae-gihyo $ cd itamae-gihyo $ vagrant init ubuntu/trusty64 $ vagrant up
その後、
$ vagrant ssh vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-add-repository ppa:brightbox/ruby-ng vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get update vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get install ruby2.2 vagrant@vagrant-ubuntu-trusty-64:~$ ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux-gnu]
Rubyがインストールできたらgemコマンドを使ってItamaeをインストールします。
vagrant@vagrant-ubuntu-trusty-64:~$ sudo gem install itamae vagrant@vagrant-ubuntu-trusty-64:~$ itamae version Itamae v1.4.2
パッケージ管理システムによるItamaeのインストール
Itamaeをインストールするためのもう一つの方法はパッケージ管理システムによるインストールです。このパッケージを使うことで独立したRubyがインストールされ、
Chef社が開発してるOmnibusというツールを利用して作成されたItamaeのパッケージを利用することができます。現在、
レシピを書く
Itamaeを使うには、
# dstat.rb
package "dstat" do
action :install
# version "0.7.2-3build1"
end
上記のレシピは
Itamaeには他にもいくつかのリソースが用意されています。次回、
Itamaeを実行する
先ほどのレシピをdstat.
vagrant@vagrant-ubuntu-trusty-64:~$ cat dstat.rb package "dstat" do action :install end vagrant@vagrant-ubuntu-trusty-64:~$ sudo itamae local dstat.rb INFO : Starting Itamae... INFO : Recipe: /home/vagrant/dstat.rb INFO : package[dstat] installed will change from 'false' to 'true' vagrant@vagrant-ubuntu-trusty-64:~$ dstat You did not select any stats, using -cdngy by default. ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 7 2 90 0 0 0| 454k 604k| 0 0 | 0 0 | 102 228 ^C
Itamaeを実行すると、--log-level
オプションを使います。一度dstatをアンインストールして、--log-level=debug
付きで再度実行してみます。
vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get purge dstat vagrant@vagrant-ubuntu-trusty-64:~$ sudo itamae local --log-level=debug dstat.rb (中略) DEBUG : Executing `dpkg-query -f '${Status}' -W dstat | grep -E '^(install|hold) ok installed$'`... DEBUG : stderr | dpkg-query: no packages found matching dstat DEBUG : exited with 1 DEBUG : (in show_differences) INFO : package[dstat] installed will change from 'false' to 'true' DEBUG : Executing `dpkg-query -f '${Status}' -W dstat | grep -E '^(install|hold) ok installed$'`... DEBUG : stderr | dpkg-query: no packages found matching dstat DEBUG : exited with 1 DEBUG : Executing `DEBIAN_FRONTEND='noninteractive' apt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' install dstat`... (中略) DEBUG : stdout | Setting up dstat (0.7.2-3build1) ... DEBUG : exited with 0 (後略)
実際に実行されているコマンドが表示されていることがわかるかと思います。まず、
先ほどのレシピではdpkgやaptなどといったOS固有のコマンドは記述しませんでしたが、
次に、
vagrant@vagrant-ubuntu-trusty-64:~$ sudo itamae local --log-level=debug dstat.rb (中略) DEBUG : Executing `dpkg-query -f '${Status}' -W dstat | grep -E '^(install|hold) ok installed$'`... DEBUG : stdout | install ok installed DEBUG : exited with 0 DEBUG : Executing `dpkg-query -f '${Status} ${Version}' -W dstat | sed -n 's/^install ok installed //p'`... DEBUG : stdout | 0.7.2-3build1 DEBUG : exited with 0 DEBUG : (in show_differences) DEBUG : package[dstat] installed will not change (current value is 'true') DEBUG : package[dstat] version will not change (current value is '0.7.2-3build1') DEBUG : Executing `dpkg-query -f '${Status}' -W dstat | grep -E '^(install|hold) ok installed$'`... DEBUG : stdout | install ok installed DEBUG : exited with 0
すでにdstatがインストールされている状態で先ほどのレシピを実行すると、
dry-runモード
ところで、
vagrant@vagrant-ubuntu-trusty-64:~$ sudo itamae local --dry-run --log-level=debug dstat.rb (中略) DEBUG : package[dstat] installed will not change (current value is 'true') DEBUG : package[dstat] version will not change (current value is '0.7.2-3build1')
このように、
vagrant@vagrant-ubuntu-trusty-64:~$ sudo apt-get purge dstat vagrant@vagrant-ubuntu-trusty-64:~$ sudo itamae local --dry-run --log-level=debug dstat.rb (中略) INFO : package[dstat] installed will change from 'false' to 'true' (後略)
再びdstatをアンインストールして、
いろいろな実行方法
ここまではローカルのホストに対してItamaeを実行しました。Itamaeは他に2つの実行方法をサポートしています。それぞれを紹介します。
ローカル実行
ローカル実行
$ itamae local recipe1.rb recipe2.rb
SSH経由の実行
ItamaeはSSH越しのホストに対して実行することも可能です。これにより構築対象のホストにItamaeをインストールせずに実行できます。以下のように実行します。
$ itamae ssh --host target-host --user remote-user recipe1.rb recipe2.rb
また、--vagrant
が用意されています。以下のようにVagrantの仮想マシンがあるディレクトリで--vagrant
を指定することで、
$ vagrant status Current machine states: default running (virtualbox) (中略) $ itamae ssh --host default --vagrant recipe1.rb recipe2.rb
ほかに利用できるオプションはヘルプを参照してください。以下のコマンドでヘルプを表示できます。
$ itamae help ssh
Dockerコンテナへの実行
これはまだ実験的な機能ですが、
$ itamae docker --image ubuntu:14.04 recipe1.rb recipe2.rb $ itamae docker --container container-id recipe1.rb recipe2.rb
まとめ
Itamaeの基本は以上です。非常にシンプルで簡単だったと思います。
最後にItamae関連の各種リソースについて紹介しておきます。
- GitHub
(ソースコード) - Slack
(チャット) - 自由に参加できます。質問があったら気軽に書き込んでください
- ドキュメント
次回は
次回は、