Chef

提供: 技術wiki
ナビゲーションに移動 検索に移動

chefはサーバ構築におけるOSの設定やミドルウェアの導入を自動で行うツールである。 chefでの環境構築方法をいくつかパターンがあるがここではchef-clientからknife-zeroを使用してサーバを構築する方法を記述する。 作業環境はlinux系マシンを前提とする。windowsの場合はvagrantを利用し仮想のlinux環境を構築することを勧める。 また、ローカルで作成したクックブックは踏み台サーバを経由し対象サーバに適用していく。

※前提として全てのサーバが踏み台を経由してSSH(ポート22)で接続可能なこと。

作業環境構築

SSH準備

作業環境から多段SSHでログインできるようにする。 sshのconfigファイルを下記のように記述する。

$ vi ~/.ssh/config
Host           proxy_host
HostName       XX.XX.XX.XX
User           ec2-user
IdentityFile   /home/vagrant/.ssh/private-key.pem

Host           target_host
HostName       target_host
User           ec2-user
IdentityFile   /home/vagrant/.ssh/private-key.pem
ProxyCommand   ssh -W %h:%p proxy_host

下記のコマンドでssh接続ができれば準備完了とする。

ssh terget_host

chefの導入

ChefDKとknife-zeroをインストールする。

$ wget https://packages.chef.io/stable/el/6/chefdk-0.12.0-1.el6.x86_64.rpm
$ rpm -Uvh chefdk-0.12.0-1.el6.x86_64.rpm
$ chef gem install knife-zero --no-document

サーバ構築

作業リポジトリ作成

リポジトリを作成したディレクトリで下記のコマンドを実行。 コマンドが完了するとchef-repoというディレクトリが作成される。

$ chef generate repo chef-repo

続いてvagrantでknife-zeroを使用する設定をする。

$ cd chef-repo
$ mkdir .chef
$ echo 'local_mode true' > .chef/knife.rb

レシピ作成

chef-repo直下で下記のコマンドを実行する。 実行完了後にcookbookディレクトリの下にクックブックが作成される。

$ knife cookbook create {クックブック名}

クックブックのrecipesディレクトリの中にdefault.rbというファイルがある。 これがデフォルトのレシピである。 レシピを追加する際は同じディレクトリ内に新規にファイルを作成する。

レシピ適用

下記のコマンドで適用先のホストがChefを使用できるようパッケージをインストールする。 実行が完了するとnodes直下にノード名のjsonファイルが作成される。

$ knife zero bootstrap {適用先ホスト名} -x ec2-user --hint ec2 --sudo -N {ノード名(適用先ホスト名が分かりやすい)}

下記のコマンドで適用先のホストに適用するクックブックを追加する。

$ knife node run_list add {ノード名} {クックブック名}

下記のコマンドで適用先のホストにクックブックを適用する。

$ knife zero converge '{ノード名}' --attribute ec2.local_ipv4 -x ec2-user --sudo -i {鍵のパス}

レシピを追加する際はノード名のjsonファイルを書き換える。 run_listの項目にレシピを指定することで適用するレシピが追加される。 クックブック名しか指定されていない場合はデフォルトレシピのみが適用される。

"run_list": [
  "recipe[webserver]",
  "recipe[webserver::httpd]",
  "recipe[webserver::wordpress]"
 ]

他、参考リンク

環境毎のパラメータ設定

Chef attributeとenvironmentsで環境毎の設定値を変数にする

サンプル

チャットサーバ構築のCookBook