Chefでインフラ構成をするために必要なツールの概念のみをまとめました。
ここで出てくるキーワード:
- chef
- vagrant
- barkshelf
- serverspec
- test-kitchen
(ちなみにこれら全てgem install xxxで入れられます)
どう使うかというより、よく出てくるこいつら何やるんだっけ?みたいなところを書いたつもりで、とりあえず細かいことを気にせずに、まずはローカルでインフラを構築してテストする環境を整えてしまいたい人向けです。
実際にどういうふうに運用するのか気になったら、以下のページが参考になると思います。
- http://qiita.com/yshnb/items/854a1770d0d47479ab47
- http://qiita.com/futoase/items/3a77a7d86ea896488b6b
- http://www.ryuzee.com/contents/blog/6466
Chef
"Infrastructure as Code"を牽引しているChef先生。インフラの設定も全てソースコードでやって、gitで管理できるようにしましょうという話。記述方法がRubyなので、他の独自言語で設定するツールより愛されている気がする。
インフラの設定なんて、シェルスクリプトで書けばいいんじゃないのと思うかもしれないが、シェルスクリプトより優れている点として以下の様な点がパッとあげられる。
- OS間の違いを吸収。Javascriptで言うjQuery的役割
- 何度やっても同じ結果になるという冪等性を保証した設計
- 他人が書いたものを再利用できるエコシステムの存在
- 複数台サーバーがあった時、サーバーノードごとの設定も自然に記述できる
(注: ただし、最近Dockerが出てきてImageをそのまま配布する流れになってきたことにより、シェルスクリプトに比べての優位性は一時期より下がってきている)
Chefは、recipeとかknifeとかchef-soloとか概念が色々出てきて勉強することが付きないが、習うより慣れろ。ここで立ち止まらずに、さっさと、chefでのインフラを設定を試してテストする環境を整えてしまおう。
Vagrant
chefでの環境構築を手早く試す、テストするためによく用いられるツール。
Vagrantの説明は、以下のページが導入として良かった。
http://knowledge.sakura.ad.jp/tech/1552/
自分でも簡単に説明しておくと、Vagrantは、様々なOS/設定の(仮想)マシンをコマンドで簡単にセットアップできるというのがメリット。つまり、Vagrantはインターフェース的な役割で、仮想マシンを作るソフトウェアではない。仮想化ソフトとしてはデフォルトでVirtual Boxを使い、VMWareにすることなどもできる。
仮想にカッコを付けたのは、実は仮想マシンだけではなく、Amazon EC2やDegital Ocean等の実マシンや、更にはDockerコンテナも立ち上げることができる。ここまでくれば、インターフェースという意味もわかってくるはず。
Vagrantの使い方の基礎だけ書いておくと、
vagrant init (hogehoge)
でVagrantfileという設定ファイルが作られ、
vagrant up
でその設定に基づく仮想マシンが立ち上がるという仕組み。
vagrant ssh
でその中に入っていろんなことをしたり、テストをすることもできる。
Berkshelf
Chefのcookbook版Gemfileのような存在。
複数のCookbookを、バージョンごとの依存関係を解決しつつインストールすることが出来る。
berks init .
されているberks管理下のディレクトリ以下でBerksfileを作り、ここに使いたいCookbookを書いて、
berks install
すれば必要なCookbookがインストールされる。
Serverspec
http://serverspec.org/
https://github.com/serverspec/serverspec
Serverマシンの状態をrspecのようにテストすることが出来るTestツール。
chefspecやminitest-chef-handlerと違い、テストがChefに依存しているわけではなく、純粋にサーバーの状態をテストしているため、Chefだけでなく、puppetやシェルスクリプトで構成したものでもテストを行うことが出来る。
RedHat,Debian,FedoraなどUnix/Linux系のOSはだいたい網羅しており、同じspecを書いただけで複数のOSのテストに対応できる。
Test Kitchen
http://kitchen.ci/
https://github.com/test-kitchen/test-kitchen
サーバーのテストをする時の統合プラットフォームで、kitchenという名前のコマンドを提供している。すごくわかりやすい命名。
提供している機能はいろいろあるがメインは以下の2つ。
- 複数プラットフォーム、複数サーバー設定のコンビネーションの構築とそのテストを簡単に行える
- テストをクリーンなOSの状態から始めたり、以前のテストの状態から始めたりを自由に行える
あとは、作成したサーバーに入れる機能などもあり、デバッグ時に助かる。
なお、テストとしてServerspecを用いることが出来る。