Packeageリソースを使用して、ディストリビューションのパッケージ管理システムを操作してインストールします。
ここから、ついに自分でChefのCookbookを作成していく作業に入ります。以下の流れで作業を行います。
knifeコマンドを使用してCookbookのひな型を作成します。
$ sudo knife cookbook create wordpress01 -o cookbooks ** Creating cookbook wordpress01 in /home/******/chef-repo/cookbooks ** Creating README for cookbook: wordpress01 ** Creating CHANGELOG for cookbook: wordpress01 ** Creating metadata for cookbook: wordpress01
前回、『Cookbookとは「インフラをコード化してあるべき状態を記述したChefのファイル群」』と説明しました。Cookbookは以下図のように複数のファイルから構成されています。Knifeコマンドを用いることで、図のようなファイル・ディレクトリ構造のモトを簡単に作成できます。
RecipeはCookbookのうち実行内容を記載するファイルです。今回はAttributeやTemplate/Fileは使用しません。Recipeに記述した内容をそのまま実行するRecipeを書きます。
編集するファイルは「cookbook/wordpress01/recipes/default.rb」です。Recipeに実行させたい内容を記述するとき、「Resource」と呼ばれる形式(リソース)に従って記述していきます。今回は「Package」リソースを用いてパッケージ管理システム(今回はCentOSを使用していますので「yum」になります)によってパッケージをインストールするRecipeを書きます。
他のResourceの記述方法については公式ドキュメントを参考にしてみてください。
package ['httpd’] do action :install end package ['httpd-devel'] do action :install end package ['mysql'] do action :install end package ['mysql-server'] do action :install end package ['mysql-devel'] do action :install end package ['php'] do action :install end
PackageリソースをPackageの数だけ記載して、1個ずつパッケージをインストールしていくRecipeになっています。
分かりやすいですがパッケージの数が増えれば増えるほど冗長になっていくため、実際にChefを活用していく段階では、このような書き方は推奨されません。しかし、ここで覚えておいていただきたいのは「Chefというのは実はこのような単純なものの組み合わせでできている」ということです。Rubyだから、プログラムだからと身構える必要はないのです。実行する内容の集合体です。
ここから始めて、だんだんと条件分岐や繰り返しなどのプログラマブルな処理が必要になってくるはずですので、そこでRubyをRecipeに盛り込んでいけばいいのです。
package ['httpd', 'httpd-devel', 'mysql', 'mysql-server', 'mysql-devel', 'php', ‘php-mysql’] do action :install end
記事公開時にPackageをインストールするRecipeの書き方の部分で、php-mysqlが抜けておりました。上記の通り訂正させていただきます。
Packageの後にインストールしたいパッケージ名をカンマ区切りで列挙していきます。これで先ほど18行あったRecipeは3行になりました。
さらにRubyのループを使って「記載された分だけPackageインストールを実行する繰り返し処理の記述例」もありますが、今回は割愛します。
実際に作成したRecipe/Cookbookを実行してみます。
$ sudo knife node run_list add node01 'recipe[wordpress01]' node01:
  run_list:
    recipe[wordpress01]
$ sudo bundle exec knife zero chef_client 'name:node01' -x <ユーザー名> -P <パスワード> --sudo
node01 Starting Chef Client, version 12.3.0
node01 resolving cookbooks for run list: ["wordpress01"]
<<<中略>>>
node01   * yum_package[httpd, httpd-devel, mysql, mysql-server, mysql-devel, php] action install
node01     - install version 2.2.15-39.el6.centos of package httpd
node01     - install version 2.2.15-39.el6.centos of package httpd-devel
node01     - install version 5.5.43-1.el6.remi of package mysql
node01     - install version 5.5.43-1.el6.remi of package mysql-server
node01     - install version 5.5.43-1.el6.remi of package mysql-devel
node01     - install version 5.4.40-1.el6.remi of package php
node01
node01 Running handlers:
node01 Running handlers complete
node01 Chef Client finished, **/** resources updated in **.******* seconds
上記のように表示されればパッケージのインストールは完了です。MySQLとPHPについては、RemiリポジトリからCentOS標準よりも新しいバージョンのパッケージをインストールしていることが確認できると思います。
今回はChefのRecipeの本当に基本的な部分についてだけ触れました。ここからさまざまなResourceを使い分け、Rubyによる動的な記述によってできることはどんどん増えていきます。
始めの一歩が大事です。だんだんとChefに慣れていって、実務に活用されるよう望みます。次回はAttributesやTemplatesを活用したChefならではのメリットについて解説していきます。
環境構築自動化の手順と評価検証、Puppetの基礎知識
OpenStackで激変するシステム開発・運用  “抽象化”が実現する「究極の自動化」とは
PowerShell Desired State Configuration(DSC)とは(前編)
アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識Copyright © ITmedia, Inc. All Rights Reserved.