Nedia What's up!

ネディアのエンジニアによるIT技術やサービスの紹介・検証などをお届け!

第2回 サーバー設定ツール「Chef」 (2/3)

フレームワーク「Chef」の基本

2回目となる今回はChefのインストールと使い方がメインとなります。以下の順番で説明いたします。

——————————
・用語解説
・Chefのインストール
・Chefの使い方
——————————

用語解説

Chefはその名の通り「料理人」という言葉が由来になっており、その構成要素も料理をモチーフにして命名されています。

そのため、イメージしやすいと紹介されることもありますが、実際は独特の用語が多く、使われる用語の全てを理解するのは容易ではありません。

Chefを使うのに、最低限必要な用語をまとめましたので確認してください。

リポジトリ

Chef の実行に必要な一連のファイルをまとめる入れ物

クックブック

特定のレシピに必要なデータやファイルをまとめるもの。

レシピ

クックブックの中で実際に実行されるものでRubyで記述するパッケージやサーバの設定などを記載していきます。

リポジトリ > クックブック > レシピ という階層です。

Chefで何かをしようとしたらまずリポジトリを作り、次に例えば apache を入れたかったらapache のクックブックを作り、そのための設定をレシピに書くというイメージです。

knife

knife は Chef に含まれるツールでクックブックなどを作ることができます。

Chef-Solo

Chef-Solo は自分自身に対してクックブックを実行することができます。そのため、Chef-Solo はログインしたサーバー内での実行を前提としています。

Chefのインストール

それではインストールの説明に入ります。
まず公式サイトより、インストーラを入手します。下記のサイトにアクセスしてください。

インストーラのダウンロード

https://www.getchef.com/download-chef-client/

CentOS6 64bit環境であれば、
・Enterprise Linux
・6
・x86_64
と選択し、

最後に Chef のバージョンを選択してダウンロードし、
/usr/local/src/ 以下に配置します。

chef_down

Chef-Soloのインストール

Red Hat Enterprise Linux6、x86_64構成でのrpmは下記の通りです。
自分のサーバー構成に合ったrpmはchef公式パッケージダウンロードページから選んでください。

Chef-Soloがインストールされていることを確認しましょう。

Chef用のユーザー追加

続いてChef用のユーザを作成します(必須ではありません)

なお、chefuser01のホームディレクトリ(/home/chefuser01)が今回のリポジトリにあたります。
リポジトリといってもただのディレクトリなので、mkdir等で別途作成することも可能です。

Chef用のユーザを作成した場合には、sudoコマンドが使えるようにします

グループへの追加

idコマンドでユーザーの情報を確認します

Chefの使い方

ここからは作成したchefuser01で再度ログインしなおしてください。

Knifeの設定を行います。/home/chefuser01/.chefディレクトリ作成し、

/home/chefuser01/.chef/knife.rbファイルを作成し以下の通りに記載します。

つぎにChef-Soloの設定を行います。/home/chefuser01/cookbooksディレクトリを作成し

以下の通りに記載します。

ここまで準備が出来たら最後にクックブックを作成してみましょう。
sample_cookbook という名前のクックブックを作成します。
下記のコマンドを実行すると、クックブックのテンプレートが展開されます。

/home/chefuser01/cookbook 以下にsample_cookbook というクックブックが作成されます。

レシピの作成

クックブックの作成が終わりましたので、次にレシピの作成をします。

ここでは、リソースを使用してレシピを作成します。
リソースは、レシピで状態を定義するために作成された言語です。
例えば、ディレクトリが作成されている。パッケージがインストールされている。など同じフォーマットで様々な状態を定義できます。

基本的なフォーマットは以下の通りです。

それでは、リソースを使用して実際にレシピを作成してみましょう。
下記のレシピでは、/tmp以下にfolderというディレクトリがある状態を定義しています。
また、所有ユーザや権限の設定も同時に行っています。

/home/user01/cookbooks/sample_book/recipesディレクトリにsample_recipe.rbという名前のレシピを以下の通りに作成します。

実行するレシピ・クックブックの登録

ノード(Chef-Client/Chef-Soloを実行するマシン)に実行するレシピを設定します。
ここではファイル名をnode.jsonとし、先程作成したレシピをランリストに設定しています。基本的なフォーマットは以下の通りです。

/home/user01/node.jsonファイルを作成し以下の通りに記載します。下記のファイルは、ノード固有の変数やランリストと呼ばれる実行レシピリストを定義します。

これで準備完了となります。

実行

準備が整いましたのでChef-Soloを実行してみましょう。
/home/user01で以下のコマンドを実行します。root権限が必要となるため、ここではsudoを使用して実行します。

/tmp以下に、“folder”という名前のディレクトリが存在することを確認しましょう。
また、ファイルのowner・group・modeも定義した内容になっているはずです。

Chefはレシピとノードの状態を比較し、異なる場合のみ変更を行います。
そのため、レシピの定義と同じ状態でChef-Soloを何度実行しても同じ実行結果になります。
このように何度実行しても同じ状態になる特徴は、冪等性(べきとうせい)と呼ばれています。

以上がChefのインストールと使い方になります。

レシピは非常に簡単な内容でしたが、まずこの基本を理解することが大事です。
最後となる次回は、クックブックの紹介とまとめです。