【#Kibana】Chef Solo（chef-solo） を使って Elasticsearch と Kibana3 をインストール #Elasticsearch #GetChef_ja

AWS の EC2 インスタンス上に作成した Linux （RHEL6.5系）環境で Chef Solo と Berkshelf を使って Elasticsearch と Kibana3 をインストールした際の手順を自分用のメモとしてまとめました。

## 1: iptables の無効化

AWS の セキュリティグループの機能で適切なセキュリティ設定が行われていることを前提に、 iptables を無効化します。

### 手順 1-1: iptables サービスを停止します

```bash
[bash]$ sudo service "iptables" stop
[bash]$ sudo service "iptables" status

iptables: Firewall is not running.
```

→ 上記のように表示されることを確かめます。

### 手順 1-2: iptables サービスの自動起動を無効化します

```bash
[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
[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
[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
[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: ラッパークックブックの作成

### 手順 3-1: Cookbook の置き場を作成します

```bash
[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
[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
[bash]$ cat << EOF | sudo tee -a /var/chef/site-cookbooks/wrapper-cookbook/metadata.rb
depends          'java'
depends          'elasticsearch'
depends          'kibana'
EOF
```

```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          'java'
depends          'elasticsearch'
depends          'kibana'
```
### 手順 3-4: Cookbook の依存関係設定ファイル `Berksfile` を編集します

```bash
[bash]$ cat << EOF | sudo tee /var/chef/site-cookbooks/wrapper-cookbook/Berksfile
source "https://api.berkshelf.com"
cookbook "kibana", git: "git://github.com/realityforge/chef-kibana.git"
metadata
EOF
```

### 手順 3-5: Cookbook のデフォルトレシピファイル `default.rb` を編集します

```bash
[bash]$ cat << EOF | sudo tee -a /var/chef/site-cookbooks/wrapper-cookbook/recipes/default.rb
include_recipe "java::default"
include_recipe "elasticsearch::default"
include_recipe "kibana::apache"
include_recipe "kibana::default"
EOF
```

```rb:default.tb
#
# Cookbook Name:: wrapper-cookbook
# Recipe:: default
#
# Copyright (C) 2014 YOUR_NAME
#
# All rights reserved - Do Not Redistribute
#
include_recipe "java::default"
include_recipe "elasticsearch::default"
include_recipe "kibana::apache"
include_recipe "kibana::default"
```

## 4: クックブックの適用

### 手順 4-1: Berkshelf を使って依存関係のあるクックブックをダウンロードします

```bash
[bash]$ cd /var/chef/site-cookbooks/wrapper-cookbook/
[bash]$ sudo chef exec berks vendor /var/chef/cookbooks
[bash]$ ls -l /var/chef/cookbooks/

total 56
drwxr-xr-x 4 root root 4096 Xxx XX XX:XX 7-zip
drwxr-xr-x 7 root root 4096 Xxx XX XX:XX apache2
drwxr-xr-x 9 root root 4096 Xxx XX XX:XX ark
-rw------- 1 root root  868 Xxx XX XX:XX Berksfile.lock
drwxr-xr-x 5 root root 4096 Xxx XX XX:XX build-essential
drwxr-xr-x 8 root root 4096 Xxx XX XX:XX chef_handler
drwxr-xr-x 6 root root 4096 Xxx XX XX:XX elasticsearch
drwxr-xr-x 5 root root 4096 Xxx XX XX:XX iptables
drwxr-xr-x 8 root root 4096 Xxx XX XX:XX java
drwxr-xr-x 6 root root 4096 Xxx XX XX:XX kibana
drwxr-xr-x 7 root root 4096 Xxx XX XX:XX logrotate
drwxr-xr-x 6 root root 4096 Xxx XX XX:XX pacman
drwxr-xr-x 8 root root 4096 Xxx XX XX:XX windows
drwxr-xr-x 9 root root 4096 Xxx XX XX:XX wrapper-cookbook
```

### 手順 4-2: Node の設定ファイル `node.json` を作成します

```bash
[bash]$ cat << EOF | sudo tee /etc/chef/node.json
{
  "run_list": "wrapper-cookbook::default"
}
EOF
```

### 手順 4-3: Environment の置き場を作成します

```bash
[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
[bash]$ cat << EOF | sudo tee /etc/chef/environments/development.json
{
  "name": "development",
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "default_attributes": {
    "java": {
      "install_flavor": "oracle",
      "jdk_version": 8,
      "oracle": {
        "accept_oracle_download_terms": true
      }
    },
    "elasticsearch": {
      "version": "1.3.2"
    },
    "kibana": {
      "version": "3",
      "kibana3_version": "3.1.0",
      "base_dir": "/srv/kibana"
    }
  }
}
EOF
```

### 手順 5: Chef Solo を使って Elasticsearch と Kibana3 をインストールします

```bash
[bash]$ sudo chef-solo -j "/etc/chef/node.json" -E "development"
```

### 手順 6: ブラウザを使って http://[IPAddress]/ にアクセスします

```
ブラウザを使って http://[IPAddress]/ にアクセスします
```

→ Kibana3 のトップページが表示されれば成功です。


以上