SecurityInsight | セキュリティインサイト

『入門Chef Solo - Infrastructure as Code』(伊藤直也/ダイレクトパブリッシング)

『入門Chef Solo - Infrastructure as Code』 Amazon Kindle版、達人出版会EPUB版、PDF版がある

 サーバ管理の自動化ツール「Chef」を知るための入門書です。著者みずからが出版するダイレクトパブリッシング形式の電子書籍で、AmazonからKindle版が、達人出版会からEPUB版とPDF版が刊行されています。

 Chefというのは、Rubyを使ってサーバの設定や更新を行なうレシピ(手順書)を作り、そのレシピをいろいろと組み合わせることでサーバの運用管理を自動化できるようにするフレームワークです。本書は、Chefのスタンドアロン版である「Chef Solo」を用いて、インストールの仕方、レシピの書き方、自動化の方法などを説明しています。

 とにかく読みやすくて、分かりやすいです。技術書の範疇に入る本かと思いますが、コードやサーバ管理に不案内な人でもスッと読めてしまうと思います。「内容は読めば分かるのでとりあえず読んでください」と言いたくなるほどです。

 なぜ読みやすいのかというと、情報の出し方がウマいからだと感じました。理解に時間がかかりそうな事柄については最初はあえて語らず、ステップを踏んでもう少し知りたいというタイミングになったら詳しい説明に入ります。たとえば、Chefの特徴については、「#1 Chefとは何かを知りたい─Chef Overview」でこんなふうに説明します。

Chefは手順書をコードによって自動化するツールと述べましたが、より本質的には「サーバーの状態を管理し収束させるためのフレームワーク」です。(中略)定義した「あるべき状態」のレシピと実際のサーバーが異なる状態にあるならChefを動かしてレシピを適用する。すると、そのサーバは定義された「あるべき状態(State)に収束(Convergence)」します。(中略)

…とまあ堅いことを言いましたがとりあえずは「サーバー設定周りを自動化するツール」くらいに思っていて構いません。

 また、同じく#1で、Chefで使われるResourceという概念について、こう説明します。

Chefは比較的シンプルで分かりやすいツールのはずなのに学習コストが少々お高め、という印象があります。 その原因のひとつに、Cookbook、Resource、Attribute、Data Bags、Role、Environment、Provider、LWRP…など多数のChef独自の概念が存在することが挙げられます。 (中略)

(しかし)実際には、筆者のような小規模な環境の使い方ではChef Soloの実行の仕方と標準で提供されているResourceさえ分かればほぼ問題ありませんでした。

 要は、Chefというのは「サーバー設定周りを自動化するツール」であり、「まずは標準Resourceの使い方だけ覚えればOK」ということです。

 続いて「#2 Chef Soloをインストールして試したい─Hello Chef!」で、具体的にコマンドを操作してから、こう説明します。

レシピを書く際にlogやpackageという命令を使いました。このlogやpackageは、Ruby組み込みの文法ではなくChefが提供するDSLです。これらのレシピ内で使う、サーバーの状態になにがしかの影響を与える命令をChefでは“Resource”と呼びます。

 #3以降は、さまざまなResourceを使っていき、「#8 代表的なレシピのサンプルを見たい─td-agentのレシピを読む」になって、ようやく「なんで“Resource”?」として、Resourceが何であるかというChefの思想について述べることになります。

本質的にはChefがやっていることは「サーバーの状態を管理する」ということだと述べました。つまり、この視点でみると、レシピには「ノード(筆者注:サーバーのこと)のあるべき状態」が書かれているとみなせるわけです。nginxが必要なら「nginxがインストールされている」という状態をレシピに書く。(中略)

管理するのはノードを構成する何かしらの要素の状態。その「何かしらの要素」こそがリソースですね。ノードを構成するパッケージ、サービス、設定ファイルといった各種リソースがあってレシピにはそれらリソースの状態を記述するんです。ゆえに、そのシンタックスを提供するものは“Resource”と呼ばれるのです。(中略)

Chefのクックブックやレシピには「処理の順番を定義する」のではなく「サーバーが最終的にどうなって欲しいか」という状態を定義する、という捉え方がよりChefらしい捉え方であるとも言えます。

 こういう説明をされると、次を読み進めたくなりますし、読み終わってからも、本書が扱っていない次のステップへと進みたくなります。本書の最大の魅力ではないかと思います。

Kindle Paperwhite上での表示画面

 構成としては、この辺りまでが前半(Kindle Locationで44%)です。#9以降の後半では、具体的なResourceとして、Package、Service、Templateなどを説明していきます。その過程で、最初にResourceの「変数」としか説明していなかったAttributeを「属性」としてどのような役割を担うかも説明していきます。

 #22では、Chefを大規模環境で動かすためのChef Serverについて簡単な説明があります。最終章の「#23 どこまでをChefでやるべきか」は、Chefを実践するうえでの注意点や今後の見通しが述べられます。

 個人的には、最後の最後にでてくる「筆者がChefを使い始めた理由」という項目を読んで、著者の主張がストンと腹に落ちました。これも、「最初はあえて語らないという情報の出し方のウマさ」の1例かもしれません。著者が今回、情報をパッケージ化して提供する本(電子書籍)というフォーマットを選択したのも、そうした情報の出し方による効果をねらってのことでしょう。

 Webに情報がたくさんあるのにわざわざ本を読む必要性を感じないという人もいるかもしれません。でも、たくさんの情報をどう料理してくれるかを楽しめるのが本の魅力の1つです。本書の読後感で言うと、腕利きのシェフにウマい料理を食べさせてもらったという感じでしょうか。

書誌情報

著者:伊藤直也
発売日:2013年3月11日
価格:890円
図版色数:4C
ページ数:137ページ(Amazon推定)、124ページ(達人出版会 A4 PDF版換算)
Kindle Location:1888
Amazon ASIN:B00BSPH158

購入先

電子版 Amazon.co.jp Kindleストア(アソシエイトリンク)

電子版 達人出版会(EPUB版、PDF版)