そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

chef - サーバ構成を管理する

サーバの設定(ソフトのインストールやサーバの起動など)をスクリプト
に記述して、更新対象のサーバで実行させるツールです。
このツールで、同じ役割のサーバの状態を同じに保つことができます。
(もちろんデータベースの中身やログなどは異なりますが)

今回は chef-solo を使って、スタンドアロンで動かします。

インストール

curl -L https://www.opscode.com/chef/install.sh | sudo bash

CentOS にインストールした場合は /opt/chef 以下にインストールされます。
/usr/bin 以下に実行ファイルへのシンボリックリンクがはられて
いますので、PATHの変更は不要です。

キーワード

  • cookbook

インストール方法や設定ファイルなどの置き場

  • recipes

インストール方法や環境設定を記述するファイル

  • nodes

chefでメンテナンスを行うサーバ

  • attributes

node毎にかわる属性(ポート番号やホスト名など)

  • resources

ソフトウエアの設定ファイル(my.cnfなど)を設定する

重要な実行ファイル

  • chef-solo

単体でレシピを実行する

  • knife

クックブックの作成などを行うコマンドラインツール

  • ohai

OSの情報を取得する

cookbook 用のリポジトリディレクトリを作成

今回は ~chef-repo とします。

$ mkdir chef-repo

cookbookの作成

今回は以下のシナリオで作成します。

  • yum用の nginx リポジトリを追加
  • nginx のインストール
  • ngins サービスの起動
$ knife cookbook create nginx

~chef-repo/cookbooks/nginx のディレクトリと
その中に以下のファイル・ディレクトリが作成されます。

  • CHANGELOG.md
  • README.md
  • attributes
  • files
  • metadata.rb
  • recipes
  • templates
  • definitions
  • libraries
  • providers
  • resources

レシピの編集

~chef-repo/cookbooks/nginx/recipes/default.rb を編集します。

#
# Cookbook Name:: nginx
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute

remote_file "/tmp/nginx-release-centos-6-0.el6.ngx.noarch.rpm" do
  source "http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm"
end

package "nginx-release-centos" do
  action :install
  source "/tmp/nginx-release-centos-6-0.el6.ngx.noarch.rpm"
  provider Chef::Provider::Package::Rpm
end

package "nginx" do
  action :install
end

service "nginx" do
  action [:enable, :start]
end

chef-solo で実行する

node.json を作成

複数のレシピを実行する場合は run_list に追加します。

{
  "name": "node",
  "run_list": [
     "recipe[nginx]"
  ]
}

solo.rb を作成

cookbook_path [ "/home/hogehoge/chef-repo/cookbooks" ]

実行テスト

$ sudo chef-solo -W -c solo.rb -j node.json

実行

$ sudo chef-solo -c solo.rb -j node.json

冪等性が確保されているので、同じコマンドを実行しても
エラーにはなりません。


入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code