読者です 読者をやめる 読者になる 読者になる

PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog
デザイナー&エンジニアによる開発者ブログ

Chefを使ってインフラ環境構築を自動化しよう!

開発環境 chef

こんにちは。PR TIMESエンジニアの落合です。
前回の記事(Chefを使ってサーバー構築運用! PR TIMES導入編! - BREAK TIMES)で、
Chefの簡単な概要と、導入方法を簡単に解説させていただきました。
今回は、具体的なChefの活用法と構築方法をご紹介させていただければと思います。

PR TIMESにおけるChefの活用について

f:id:breaktimes:20140708200907p:plain
現在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サーバーのインストールから設定等も書いていこうと思っています。
ちょっと長くなってしまいましたので、今回はこのへんで。