Linux(RHEL系)環境での Chef Solo と Berkshelf の基本的な使い方について自分用のメモとしてまとめました。
AWS の EC2 インスタンス上に作成した Linux(RHEL6.5系)環境で Chef Solo と Berkshelf を使って Apache HTTP Server をインストールします。
1: iptables の無効化
AWS の セキュリティグループの機能で適切なセキュリティ設定が行われていることを前提に、 iptables を無効化します。
手順 1-1: iptables サービスを停止します
[bash]$ sudo service "iptables" stop
[bash]$ sudo service "iptables" status
iptables: Firewall is not running.
→ 上記のように表示されることを確かめます。
手順 1-2: iptables サービスの自動起動を無効化します
[bash]$ sudo chkconfig "iptables" off
[bash]$ chkconfig --list | grep "iptables"
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
→ 上記のように表示されることを確かめます。
2: Chef Development Kit (Chef-DK) のセットアップ
Chef と Berkshelf のインストール手順です。
Chef-DK をインストールすることで、Chef と Berkshelf をまとめてインストールします。
手順 2-1: Chef-DK と Git をインストールします
[bash]$ sudo yum -y install "git" "https://packagecloud.io/chef/stable/download?distro=6&filename=chefdk-0.2.2-1.x86_64.rpm"
[bash]$ rpm -qa | egrep "git-|chefdk"
git-1.7.1-3.el6_4.1.x86_64
chefdk-0.2.2-1.x86_64
手順 2-2: ディレクトリ /etc/chef/
を作成します
[bash]$ sudo mkdir -p /etc/chef
[bash]$ ls -ld /etc/chef/
drwxr-xr-x 2 root root 4096 Xxx XX XX:XX /etc/chef/
手順 2-3: Chef Solo の設定ファイル solo.rb
を作成します
[bash]$ cat << EOF | sudo tee /etc/chef/solo.rb
environment_path "/etc/chef/environments"
data_bag_path "/etc/chef/data_bags"
cookbook_path "/var/chef/cookbooks"
file_cache_path "/var/cache/chef"
EOF
3: ラッパークックブックの作成
コミュニティに公開されているクックブック Apache2
をラップするだけの簡単なクックブックを作成します。
手順 3-1: Cookbook の置き場を作成します
[bash]$ sudo mkdir -p /var/chef/site-cookbooks
[bash]$ ls -ld /var/chef/site-cookbooks/
drwxr-xr-x 2 root root 4096 Xxx XX XX:XX /var/chef/site-cookbooks
手順 3-2: berks コマンドを使って wrapper-cookbook
という名前でクックブックのひな形を作成します
[bash]$ cd /var/chef/site-cookbooks/
[bash]$ sudo chef exec berks cookbook "wrapper-cookbook" --skip-vagrant --skip-test-kitchen --license="reserved" --maintainer="YOUR_NAME" --maintainer-email="YOUR_EMAIL"
[bash]$ ls -ld /var/chef/site-cookbooks/wrapper-cookbook/
drwxr-xr-x 10 root root 4096 Xxx XX XX:XX /var/chef/site-cookbooks/wrapper-cookbook/
手順 3-3: Cookbook のメタデータ設定ファイル metadata.rb
を編集します
[bash]$ echo "depends 'apache2'" | sudo tee -a /var/chef/site-cookbooks/wrapper-cookbook/metadata.rb
metadata.rb
name 'wrapper-cookbook'
maintainer 'YOUR_NAME'
maintainer_email 'YOUR_EMAIL'
license 'All rights reserved'
description 'Installs/Configures wrapper-cookbook'
long_description 'Installs/Configures wrapper-cookbook'
version '0.1.0'
depends 'apache2'
手順 3-4: Cookbook のデフォルトレシピファイル default.rb
を編集します
[bash]$ echo "depends 'apache2'" | sudo tee -a /var/chef/site-cookbooks/wrapper-cookbook/recipes/default.rb
default.rb
#
# Cookbook Name:: wrapper-cookbook
# Recipe:: default
#
# Copyright (C) 2014 YOUR_NAME
#
# All rights reserved - Do Not Redistribute
#
depends 'apache2'
4: クックブックの適用(Chef Solo の実行)
ここでは、Chef の Environment という機能を利用して Chef Solo の実行します。
Environment を利用することで、クックブック内で指定している Attribute(変数)の値を上書きすることができます。
開発環境と本番環境など、環境によって異なるパラメーターを設定する必要がある場合に便利です。
手順 4-1: Berkshelf を使って依存関係のあるクックブックをダウンロードします
[bash]$ cd /var/chef/site-cookbooks/wrapper-cookbook/
[bash]$ sudo chef exec berks vendor /var/chef/cookbooks
[bash]$ ls -l /var/chef/cookbooks/
total 24
drwxr-xr-x. 7 root root 4096 Sep 26 03:51 apache2
-rw-------. 1 root root 266 Sep 26 03:51 Berksfile.lock
drwxr-xr-x. 6 root root 4096 Sep 26 03:51 iptables
drwxr-xr-x. 7 root root 4096 Sep 26 03:51 logrotate
drwxr-xr-x. 6 root root 4096 Sep 26 03:51 pacman
drwxr-xr-x. 10 root root 4096 Sep 26 03:51 wrapper-cookbook
手順 4-2: Node の設定ファイル node.json
を作成します
[bash]$ cat << EOF | sudo tee /etc/chef/node.json
{
"run_list": "wrapper-cookbook::default"
}
EOF
手順 4-3: Environment の置き場を作成します
[bash]$ sudo mkdir -p /etc/chef/environments
[bash]$ ls -ld /etc/chef/environments/
drwxr-xr-x 2 root root 4096 Xxx xx xx:xx /etc/chef/environments
手順 4-4: Environment の設定ファイル development.json
を作成します
[bash]$ cat << EOF | sudo tee /etc/chef/environments/development.json
{
"name": "development",
"json_class": "Chef::Environment",
"chef_type": "environment",
"default_attributes": {
"apache2": {
"worker": {
"startservers": 4,
"serverlimit": 16,
"maxclients": 1024,
"minsparethreads": 64,
"maxsparethreads": 192,
"threadsperchild": 64,
"maxrequestsperchild": 0
}
}
}
}
EOF
手順 4-5: Chef Solo を実行します
[bash]$ sudo chef-solo -j "/etc/chef/node.json" -E "development"
→ レシピが実行され、エラーメッセージが表示されなければ成功です。
以上