Ubuntu
EC2
chef
chef-solo
More than 3 years have passed since last update.

Chef を使ってみた

  • Chef を使用するとサーバの環境構築が自動化できると聞いて、初歩的なパッケージインストールまでをやってみた
  • AWS EC2(Ubuntu) に Apache をインストールする

簡単な用語説明

  • node : 環境設定をしたい対象となるサーバ
  • workstation : 設定内容を記載するファイルの作成や管理をするクライアント
  • Recipe : 設定内容を記載するファイル、Ruby で書く

事前準備

workstation

$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
  • knife-solo のインストール
$ sudo gem install knife-solo
  • $ gem list で 2 つがインストールされていることを確認
  • knife コマンドの初期設定を行う
$ knife configure

node

  • AWS EC2 の Ubuntu Server を対象とする
    • インスタンスは作成済みとする

準備

Chef レポジトリの作成

  • Workstation 側で作業
  • 任意のレポジトリを下記コマンドで作成する(今回は testchef というリポジトリにする)
$ knife solo init “作成するレポジトリ名”
  • 実行後に、testchef ディレクトリが出来る
  • ディレクトリ構成

testchef/
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks

workstation の chef solo を使用し、node に Chef をインストール

  • 作成した Chef レポジトリに入り、下記コマンドを実行
$ knife solo prepare -i ~/.ssh/xxx.pem ubuntu@xx.xxx.xxx.xx
  • 下記ログが表示されれば、OK

Thank you for installing Chef!

Cookbook の作成、Recipe の記載

  • Chef レポジトリ(testchef)に移動し、下記コマンド入力
$ knife cookbook create test -o site-cookbooks
  • 実行後、site-cookbooks/test/recipes/default.rb ができるので、これを編集する
    • 今回は apache をインストールするように編集
default.rb
package "apache2" do
    action :install
end
  • 編集後、testchef/nodes/xx.xxx.xxx.xx.json を編集し、recipe を呼ぶようにする
xx.xxx.xxx.xx.json
{
    "run_list":[
        "recipe[test]"
        ]
}

chef の実行

  • 下記コマンドで実行する
$ knife solo cook -i ~/.ssh/xxx.pem ubuntu@xx.xxx.xxx.xx
  • 以下のログが出力される

Running Chef on xx.xxx.xxx.xx...
Checking Chef version...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 11.10.4
Compiling Cookbooks...
Converging 1 resources
Recipe: test::default
* package[apache2] action install
- install version 2.2.22-1ubuntu1.4 of package apache2

Running handlers:
Running handlers complete

Chef Client finished, 1/1 resources updated in 18.333540242 seconds

まとめ

  • AWS の EC2(Ubuntu) を対象に chef を使用してみた。
    • 一度 recipe を作成すると使い回しが効く
    • EC2 などと組み合わせると同じ環境を作成しやすくなる
    • Vagrant などとも相性は良さそう