Chefを使ってインフラ環境構築を自動化しよう!
こんにちは。PR TIMESエンジニアの落合です。
前回の記事(Chefを使ってサーバー構築運用! PR TIMES導入編! - BREAK TIMES)で、
Chefの簡単な概要と、導入方法を簡単に解説させていただきました。
今回は、具体的なChefの活用法と構築方法をご紹介させていただければと思います。
PR TIMESにおけるChefの活用について
現在PR TIMESでは、開発環境、ステージング環境、プレビュー環境、本番環境が存在しています。
それぞれ、開発環境・ステージング環境には、WEBとDBが入っており、プレビューと本番環境では、
WEBとDBで別のサーバーを使用しています。
これらを上記の図のように、Windows上の作業マシンからknife-soloを実行して、
本番への適応を行えるような仕組みの構築を進めています。
それでは、実際にどのように、構築を進めているかをご紹介させていただきます。
Chefのリポジトリを作成する!
前回の記事で記載したとおり、cookbookを作成するには、
リポジトリを作成しておかなければなりません。
以下のコマンドを実行してリポジトリを作成します。
今回はdevelopという名前にします。
$ knife solo init develop Creating kitchen... Creating knife.rb in kitchen... Creating cupboards...
コマンドを実行すると、カレントディレクトリに「develop」というフォルダが作成されていると思います。
そこに今後レシピを作成していく事になります。
仮想マシンに環境を構築する
knife-soloを使って仮想マシンにChef環境をセットアップします。
Cygwinに「knife solo prepare SSH情報」とすると、
Chefの実行に必要なツールやファイルが自動的にセットアップされます。
$ cd develop $ knife solo prepare chefssh #もしくは下記のコマンドでも大丈夫です。 $ knife solo prepare root@192.168.33.21 Bootstrapping Chef... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15934 100 15934 0 0 2667 0 0:00:05 0:00:05 --:--:-- 45656 ・・・中略 # vagrantディレクトリに移動 $ cd ../../vagrant/chef $ vagrant ssh [vagrant@localhost ~]# chef-solo --version Chef: 11.12.4
Cookbookを作成する。
クックブックを作成する事で、そこにレシピを作成していく事が出来ます。
今回は、ツールをインストールするようなレシピを作成していきたいので、
「tools」っていう名前でクックブックを作成します。
$ knife cookbook create tools -o site-cookbooks/ ** Creating cookbook tools ** Creating README for cookbook: tools ** Creating CHANGELOG for cookbook: tools ** Creating metadata for cookbook: tools
リソースについて
ここでちょっと、リソースについて簡単にまとめておきたいと思います。
Chefの基本的な記述方法で、リソースという概念があります。
Chefでは、ITインフラストラクチャー環境の各パーツがどんな風に作られてほしいのかを"レシピ(recipe)"と呼ばれるRubyのコードで定義します。各パーツのあるべき状態は、後述の"リソース(Resources)"を定義するという形でレシピに書いていきます。
基本的な構文として、リソースは、「実行条件」、「アクション」、「通知」、「オプション(属性)」の4つを使って定義します
{リソースタイプ} "{リソース名}" do # 実行条件 {only_if | not_if} { {条件文} } # 通知 {notifies|subscribes} {アクション}, "{リソースタイプ[リソース名]}",{:immediately|:delayed} : # オプション(属性) {オプション名} {オプション値} : # アクション action {アクション} end
Chefには、様々なリソースタイプが用意されています。
興味のある方は下記URLを参照してみるといいかと思います!
Resources Reference — Chef Single-page Topics
Vimをインストールしてみよう!
どんなサーバーでも、絶対にインストールすると思われるVimをChefを用いて
インストールしたいと思います。
アプリケーションをインストールするには、「package」リソースを使用します。
早速「develop/site-cookbooks/tools/recipes/default.rb」に書いていきます。
package "vim-enhanced" do action :install end
そして、「develop/nodes/chefssh.json」に実行したいレシピを記載する必要があるので、以下のようにします。
{ "run_list":[ "recipe[tools]" ] }
そして、Cygwinでcookコマンドを実行すれば実行されます。
$ knife solo cook chefssh Running Chef on chefssh... Checking Chef version... Recipe: tools::default * package[vim-enhanced] action install - install version 7.2.411-1.8.el6 of package vim-enhanced Running handlers: Running handlers complete Chef Client finished, 1/1 resources updated in 39.694298546 seconds $ ssh chefssh [vagrant@localhost ~]# vim -v
インストールが完了しました。
仮想サーバーで確認し、Vimコマンドが実行できるようになっていると思います。
また、インストールが完了した後に、再度cookすると以下のようになります。
$ knife solo cook chefssh Running Chef on chefssh... Checking Chef version... Recipe: tools::default * package[vim-enhanced] action install (up to date)
「up to date」と記載されていますので、更新はありませんっと教えてくれます。
こんな感じで、レシピに色んなリソースを用いて、プログラミングを行い、
簡単にサーバーを構築する事が可能になります。
次回は、もっと具体的にWEBサーバーのインストールから設定等も書いていこうと思っています。
ちょっと長くなってしまいましたので、今回はこのへんで。