Chef
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で環境毎の設定値を変数にする