EC2でChefサーバをたてる


# 参考
Install Chef Server 11.x
http://docs.opscode.com/install_server.html

入門 Chef Server #biglobetechtalk
http://www.slideshare.net/biglobedojo/chefserver-rev100

Chef を始める #1 – 概要、Chef Server を EC2 上にインストール、Workstation の設定まで
http://dev.classmethod.jp/server-side/chef-server-install/

# 環境

## Chefサーバ
m1.smallインスタンス
ubuntu server 12.04
Chef 11.4.4

## workstation
Mac OS X Lion


# Chef Server構築

## 準備
AWSでインスタンス作成(t1.microだとメモリ不足で落ちた)

* ElasticIPをつけておく(任意)
* WebUIにアクセスするためsecurity groupの設定でhttpsアクセス出来るようにしておく
* ホスト名で名前解決出来るようにしておく(重要)

```bash
$ sudo hostname <Public DNS名>
$ sudo vi /etc/hostname
```

## 設定とテスト

ホスト名で名前解決出来るようになってないとここでコケます

```bash
$ sudo chef-server-ctl reconfigure
$ sudo chef-server-ctl test
```


t1.microインスタンスでやったらメモリ不足で失敗したので

```
[2013-06-20T23:21:00+00:00] FATAL: Stacktrace dumped to /opt/chef-server/embedded/cookbooks/cache/chef-stacktrace.out
[2013-06-20T23:21:00+00:00] FATAL: Errno::ENOMEM: execute[/opt/chef-server/embedded/bin/createdb -T template0 -E UTF-8 opscode_chef] (chef-server::postgresql line 141) had an error: Errno::ENOMEM: Cannot allocate memory - fork(2)
```

m1.smallに変更してもう一度reconfigureとtest


成功すると色々テストして最後にこんな感じになる

```
Finished in 1 minute 25.08 seconds
70 examples, 0 failures
```

起動したり停止したり

```bash
$ sudo chef-server-ctl start
$ sudo chef-server-ctl stop
```

WebUIにアクセス

```
https://<Public DNS名>
```

![kobito.1371870335.891591.png](https://qiita-image-store.s3.amazonaws.com/0/25863/85b767ba-4c42-c045-3c7e-ec7095934b0c.png "kobito.1371870335.891591.png")

# Work Stationセットアップ

## インストール
手元のmacをwork stationにします

https://learnchef.opscode.com/quickstart/workstation-setup/

```bash
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
$ echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile && source ~/.bash_profile
```

* chef-validator.pem
* admin.pem
が必要

/etc/chef-server/admin.pem
/etc/chef-server/chef-validator.pem
Chefサーバから持って来てworkstationの
~/chef-repo/.chef
あたりのディレクトリ下に置く

knife configureコマンドでknife.rbファイルを作成

成功するとこんな感じ

```bash
$ cd ~/chef-repo
$ knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [/Users/<user>/.chef/knife.rb] /Users/<user>/chef-repo/.chef/knife.rb
Please enter the chef server URL: [http://mac.local:4000] https://<chef-serverのURL>
Please enter a name for the new user: [<user>]
Please enter the existing admin name: [admin]
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem] /Users/<user>/chef-repo/.chef/admin.pem
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] /Users/<user>/chef-repo/.chef/chef-validator.pem
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Please enter a password for the new user:
Created user[<user>]
Configuration file written to /Users/<user>/chef-repo/.chef/knife.rb
$
```

# Nodeの登録
t1.microインスタンス作ってNodeとして登録してみる

chef-clientインストール

```bash
$ sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash
$ sudo mkdir /etc/chef && cd /etc/chef
$ sudo knife configure client -s https://<chef-serverのURL> ./
```
client.rbとvalidation.pemが作られる

validation.pemはchefサーバのchef-validator.pemの中身をコピペ

client.rbにnode_nameを追記

```bash
$ cat client.rb 
log_level        :info
log_location     STDOUT
chef_server_url  'https://<chef-serverのURL>'
validation_client_name 'chef-validator'
node_name 'sample_node'
$
```

chef-client実行

```bash
$sudo chef-client -c client.rb
```

sample_nodeが登録されます

# 試してみる
サンプルcookbookのgetting-startedとってきて試す
(ホームディレクトリにchef-getting-started.txtを作成するだけのパッケージ)

```bash
$ cd ~/chef-repo/cookbooks/
$ git clone https://github.com/opscode-cookbooks/getting-started
$ knife cookbook upload getting-started -o .
Uploading getting-started [0.4.0]
Uploaded 1 cookbook.
$
```

RunList設定

```bash
$ knife node run_list add sample_node "recipe[getting-started]"
```

Node上でclientコマンド実行

```bash
$ sudo chef-client
$ cat chef-getting-started.txt 
Welcome to Chef!

This is Chef version 11.4.4.
Running on mac_os_x.
Version 10.7.5.
$
```
反映されました

# 雑感

- よくわかっていなかったのでいきなりサーバ立てて試したけど
ちょっとした用途ならchef-soloかhosted chefでいいのかも
- Nodeのセットアップ(chef-clientインストールしてchef-validator.pemをコピー)が面倒なので何か工夫したい
- Nodeの細かい情報(OS, HW情報,各種設定)がChefサーバに集約されるのが地味に楽しい