連載
» 2015年03月24日 18時00分 UPDATE

サーバー管理者のためのChef超入門(2):Knife-ZeroでCookbookの作成/実行/削除&git cloneコマンドでCookbookの取得 (1/2)

エンタープライズ向け機能が充実してきたChefを使って高速かつ精度の高いサーバーインフラを構築/管理する方法について解説する連載。今回はKnife-ZeroでCookbookを操作する方法やgit cloneコマンドでCookbookを取得する方法、Gitを使う利点などについて解説します。

[大喜多利哉,@IT]
「サーバー管理者のためのChef超入門」のインデックス

連載目次

 エンタープライズ向け機能が充実してきたChefを使って高速かつ精度の高いサーバーインフラを構築/管理する方法について解説する本連載。前回となる連載第1回の「エンタープライズでもInfrastructure as Code――Chef 12/Chef-Zero/Knife-Zeroの基礎知識とインストール」では、Chefのインストールまで完了しました。

 今回からは実際にCookbookを作ってみて、さらにKnife-Zeroを使ってCookbookをノードに対して実行してみましょう。前回に引き続き、以下の環境を使用します。

chef1_7.jpg 前回構築したChef-ZeroをKnife-Zero経由で利用するCookbook開発環境

Cookbookの作成/実行/削除

 まずは、Cookbook開発環境にSSHでログインし、作業ディレクトリである「chef-repo」に移動します。

$ cd ~/chef-repo

Cookbookの作成

 Cookbookのひな型を作成します。

$ knife cookbook create httpd -o ./cookbooks/

 Cookbookは複数のディレクトリ/ファイルから構成されていますが、knifeコマンドでCookbookを作成すると、コマンド側でChefのCookbookの作法に則ったひな型を作成してくれるので、作業者側は構成を意識することなく作業を進められます。

 なお今回は、「まずChefを触る」ことを目的としているので、内部構造などの詳細な説明は行いませんが、Chefを活用していくためにはChefを構成する要素の理解は不可欠ですので、以降の連載で詳細に解説します。

注釈

 本来のChefの作法では、個人で作成したCookbookは「chef-repo/site-cookbooks」に格納し、Chef社が公開しているCookbookや第三者が作成したCookbookを「chef-repo/cookbooks」に格納することが推奨されています。

 しかし2015年3月現在、Chef-Zeroの仕様で、「site-cookbooks」配下を参照しないため、個人作成のCookbookを「chef-repo/cookbooks」に作成するような手順としています。


 簡単なRecipeを書いてみます。

package “httpd” do
    action :install
end
$ vi cookbooks/httpd/recipes/default.rb

 「knife zero bootstrap」コマンドでノードに対してChefを実行する前準備をします。

$ knife zero bootstrap [ノードのIPアドレス] --ssh-password {SSHパスワード} --sudo

 この処理には時間がかかります。

 「knife zero bootstrap」が完了すると、「node list」にbootstrapを行ったノードが追加されます。

$ knife node list
[bootstrapしたノードのhostname]

 nodeに実行するCookbookを追加します。

$ knife node run_list add {ノードのhostname} httpd
{ノードのhostname}:
  run_list: recipe[httpd]

Cookbookの実行

 Cookbookを実行します。

$ knife zero chef_client 'name: {ノードのhostname}' --attribute ipaddress --ssh-password {SSHパスワード} ?sudo
xxx.xxx.xxx.xxx Starting Chef Client, version 12.0.3
xxx.xxx.xxx.xxx resolving cookbooks for run list: ["httpd"]
xxx.xxx.xxx.xxx Synchronizing Cookbooks:
xxx.xxx.xxx.xxx   - httpd
xxx.xxx.xxx.xxx Compiling Cookbooks...
xxx.xxx.xxx.xxx Converging 1 resources
xxx.xxx.xxx.xxx Recipe: httpd::default
xxx.xxx.xxx.xxx   * yum_package[httpd] action install
xxx.xxx.xxx.xxx     - install version 2.2.15-39.el6.centos of package httpd
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx Running handlers:
xxx.xxx.xxx.xxx Running handlers complete
xxx.xxx.xxx.xxx Chef Client finished, 1/1 resources updated in 25.242700967 seconds
処理中のメッセージ

 処理が完了すると、ノードにApache(httpd)がインストールされているはずです。SSHでログインして確認してみましょう。

 なお、実際の利用ケースにおいては、パッケージをインストールしただけで終わるケースはほとんどないと思います。インストール後にconfigを書き換え、サービスをstartし、自動起動設定を有効にするなどの手順も必要になってきます。

 この点については、Chefを構成する要素やRecipeの記法の理解が不可欠ですので、次回以降これらの説明をしつつ、より詳細な処理を実装できるよう解説していきます。

先ほどのCookbookをrun_listから削除

 次ページでは、Chefから少々離れてGitの話に入りますが、その前に先ほど実行した「httpd」のCookbookをrun_listから削除しておきます。

$ cd ~/chef-repo 
$ knife node run_list remove {ノードのhostname} recipe[httpd]
{ノードのhostname}:
  run_list:
 
$ cd ~/chef-repo
$ knife node run_list add {ノードのhostname} yum-epel
{ノードのhostname}:
  run_list: recipe[yum-epel]
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。