LoginSignup
13
14

More than 5 years have passed since last update.

Chef Server 11 環境構築手順

Posted at

Chefの検証と勉強用に、AWS上でChef ServerとChef ClientとなるNodeを構築。
Workstationは自分の作業用Macとして、knifeコマンドで色々やっちゃう。

前提

  • AWS関連の設定(IAM,VPC等)は済んでる、もしくは分かっているということで

環境

役割 ホスト名 OS
Chef Server test-chef-server Amazon Linux AMI 2014.09.1 (HVM)
Chef Client(Node) test-chef-client Amazon Linux AMI 2014.09.1 (HVM)
Workstation - Mac OS X 10.10.1

Workstationセットアップ

基本的に全ての作業をWorkstationのCLI上から実行する為、先に環境構築。

knifeインストール

ほぼ全ての操作をknifeコマンドで実行する。環境構築には不要だけど、とりあえずberkshelfも入れる。

Workstation
$ sudo gem install knife-solo
$ sudo gem install berkshelf

knife-ec2インストール

EC2もknifeから操作したいので knife-ec2 を入れる。が、Macの場合は先にXcodeを入れて、Command Line Toolsを入れる必要がある。
AppStoreからXcodeを入れた後、以下のコマンドを実行してCommand Line Toolsをインストールする。

Workstation
$ xcode-select --install

その後、knife-ec2をインストールする。

Workstation
$ sudo gem install knife-ec2

hosts設定

名前解決用にWorkstation上で設定しておく。

Workstation
$ sudo vi /etc/hosts
10.3.1.85    test-chef-server
10.3.1.86    test-chef-client

Chef環境構築

Chef Server及びChef Client用のEC2インスタンスを起動させる。

knife用設定

AWS用鍵設定

knife-ec2 コマンド用に作成。すでに ~/.aws/credentials とかあれば、そちらでも良い。

Workstation
$ mkdir ~/.chef
$ vi ~/.chef/credentials
[default]
aws_access_key_id = Your_Access_Key
aws_secret_access_key = Your_Secret_Key

knife用AWS関連設定

AWS関連の設定を追加する。ちなみに後で knife configure すると消えるので再度設定する必要がある。

Workstation
$ vi ~/.chef/knife.rb
knife[:aws_credential_file] = "/Users/NAME/.chef/credentials"
knife[:availability_zone] = "AZ"
knife[:region] = "Region"
knife[:aws_ssh_key_id] = "mypem_name"

試しに動作確認。以下のように表示されなければ、AWS関連の設定を見直す。

Workstation
$ knife ec2 server list
Instance ID  Name  Public IP  Private IP  Flavor    Image         SSH Key  Security Groups  IAM Profile  State
i-XXXXXXXX   XXXX             10.X.X.XX   m3.large  ami-XXXXXXXX  XXXXXXX  XXXXXXXXXXX      XXXXXX       running
i-XXXXXXXX   XXXX                         t1.micro  ami-XXXXXXXX  XXXXXXX  XXXXXXXXXXX                   stopped
    :
    :
    :

EC2インスタンス起動

Amazon Linux AMI 2014.09.1 (HVM) - ami-4985b048 を使用してt2.microで起動させる。

Workstation
knife ec2 server create \
--ebs-size 30 \
--flavor t2.micro \
--image ami-4985b048 \
--private-ip-address 10.3.1.85 \
--security-group-ids sg-XXXXXXXX \
--subnet subnet-XXXXXXXX \
-T Name=test-chef-server

上手くいくとこんなログ。最後のエラーはまだ設定してないchef関係のログなので一旦無視。

Instance ID: i-XXXXXXXX
Flavor: t2.micro
Image: ami-4985b048
Region: ap-northeast-1
Availability Zone: ap-northeast-1X
Security Group Ids: sg-XXXXXXXX
Tags: Name: test-chef-server
SSH Key: XXXX

Waiting for EC2 to create the instance................
Subnet ID: subnet-XXXXXXXX
Tenancy: default
Private IP Address: 10.3.1.85

Waiting for sshd access to become available.done
Connecting to 10.3.1.85
ERROR: Errno::ENOENT: No such file or directory - /etc/chef/validation.pem

Chef Server用のインスタンスが無事起動できたら、IPアドレスとタグ名だけ変えてChef Clientも。

Workstation
$ knife ec2 server create \
--ebs-size 30 \
--flavor t2.micro \
--image ami-4985b048 \
--private-ip-address 10.3.1.86 \
--security-group-ids sg-XXXXXXXX \
--subnet subnet-XXXXXXXX \
-T Name=test-chef-client

Chef Server構築

OS設定

Chef Serverインストール前に必要な設定を追加する。
特にホスト名関係を設定しておかないとハマる。

hostname設定

Chef-Server
$ sudo vi /etc/hosts
10.3.1.85   test-chef-server

$ sudo sed -i -e 's/HOSTNAME=\(.*\)/HOSTNAME=test-chef-server/' /etc/sysconfig/network
$ sudo hostname test-chef-server

Chef Serverインストール

Chef-Server
$ wget https://web-dl.packagecloud.io/chef/stable/packages/el/6/chef-server-11.1.6-1.el6.x86_64.rpm
$ sudo rpm -Uvh chef-server-11.1.6-1.el6.x86_64.rpm
$ sudo chef-server-ctl reconfigure

動作確認。

Chef-Server
$ sudo chef-server-ctl test

0 failures と表示されれば問題なし。
ブラウザで https://test-chef-server にアクセスすると、
SSL証明書のエラー云々についてブラウザから言われるが無視して進める。
右下にadminのパスワードが記載されているので、ログイン後に変更する。

Workstation側セットアップ

鍵ファイル配置

Chef-Serverとの通信用にChef Server上にある鍵ファイルをWorkstationに持ってくる。
事前にChef Server上で持ってこれるようにコピーして権限変更する。

Chef-Server
$ sudo cp /etc/chef-server/admin.pem /tmp
$ sudo cp /etc/chef-server/chef-validator.pem /tmp
$ sudo chown ec2-user /tmp/*.pem

Workstation上に配置した後は削除。

Workstation
$ scp -i ~/.ssh/MY.pem ec2-user@test-chef-server:/tmp/*.pem ~/.chef
$ ssh -i ~/.ssh/MY.pem ec2-user@test-chef-server "rm -f /tmp/*.pem"

Cookbook雛形取得

github上から取得する。

Workstation
$ git clone git://github.com/opscode/chef-repo.git
$ ls -1 chef-repo
LICENSE
README.md
chefignore
config
cookbooks
data_bags
environments
roles

SSL疎通設定

オレオレ証明書なのでエラーが出るため、事前に設定しておく。

Workstation
$ knife ssl fetch https://test-chef-server

knife設定

Workstation
$ knife configure --initial
Overwrite /Users/NAME/.chef/knife.rb? (Y/N) y
Please enter the chef server URL: [https://localhost.local:443] https://test-chef-server
Please enter a name for the new user: [NAME] dev
Please enter the existing admin name: [admin]
Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] /Users/NAME/.chef/admin.pem
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] /Users/NAME/.chef/chef-validator.pem
Please enter the path to a chef repository (or leave blank): /Users/NAME/chef-repo
Creating initial API user...
Please enter a password for the new user:
Created user[dev]
Configuration file written to /Users/NAME/.chef/knife.rb

Chef Serverとの通信確認。

Workstation
$ knife user list
admin
dev

knife configure で上書きされてしまった以下設定を追記しておく。まぁでももう使わないから任意で。

Workstation
$ vi ~/.chef/knife.rb
knife[:aws_credential_file] = "/Users/NAME/.chef/credentials"
knife[:availability_zone] = "AZ"
knife[:region] = "Region"
knife[:aws_ssh_key_id] = "mypem_name"

Chef Client構築

hostname設定

Chef Serverと同様に。本来ならば、EC2インスタンス起動時に設定されるのがよさげ。

Chef-Client
$ sudo vi /etc/hosts
10.3.1.85   test-chef-server

$ sudo sed -i -e 's/HOSTNAME=\(.*\)/HOSTNAME=test-chef-client/' /etc/sysconfig/network
$ sudo hostname test-chef-client

chef-client インストール

chef-clientをインストールし、Nodeとしても登録。

Workstation
$ knife bootstrap -i ~/.ssh/MY.pem test-chef-client -x ec2-user --sudo

コマンドで追加されたことを確認。

Workstation
$ knife client list
test-chef-client

$ knife node list
test-chef-client

Recipe実行

以上で環境は整ったので、動作確認がてら簡単なRecipeを実行する。
全てWorkstationから全て実行。

Coockbook作成

githubから取得したのをベースにして、新しく base_packages を作成。

Workstation
$ knife cookbook create base_packages
$ ls -1F chef-repo/cookbooks/base_packages/
CHANGELOG.md
README.md
attributes/
definitions/
files/
libraries/
metadata.rb
providers/
recipes/
resources/
templates/

Recipe修正

適当なパッケージを追加。

Workstation
vi chef-repo/cookbooks/base_packages/recipes/default.rb
chef-repo/cookbooks/base_packages/recipes/default.rb
%w{dstat git wget expect}.each do |pkg|
  package pkg do
    action :install
  end
end

Cookbookアップロード

個別にアップロードも可能だが、今回は全部。

Workstation
$ knife cookbook upload -a
Uploading base_packages [0.1.0]
Uploaded all cookbooks.

$ knife cookbook list
base_packages   0.1.0

Run List追加

NodeのRun ListにRecipeを追加

Workstation
$ knife node run_list add test-chef-client "recipe[base_packages]"
test-chef-client:
  run_list: recipe[base_packages]

NodeでRecipeを実行

ssh経由でリモート実行。

Workstation
$ ssh -t -i ~/.ssh/MY.pem ec2-user@test-chef-client "sudo chef-client"

以上。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14