シェルだけでは難しいインフラ自動構成管理ができる「Chef」とは

IT・IT製品TOP > Key Conductors > 清水 大紀(日本アイ・ビー・エム株式会社) > シェルだけでは難しいインフラ自動構成管理ができる「Chef」とは
この記事をtweetする このエントリーをはてなブックマークに追加

IT現場の道先案内人 Key Conductors

シェルだけでは難しいインフラ自動構成管理ができる「Chef」とは

開発 2017/07/04

 本連載では、Linux ONE CommunityCloudという、メインフレームの性能とLinuxのオープンエコシステムが共存するパブリッククラウド環境を利用して、Linuxエコシステムの便利で機動的なシステム開発環境を活用してさまざまなアプリケーションを開発したり、インフラを効率的に運用したりする方法を解説しています。

 Linux One Community Cloudの使い方は第2回「無償メインフレーム「LinuxONE Community Cloud」の試し方」を参照ください。また、メインフレーム環境を使ったLinux稼働環境の利点については第1回「メインフレームとOSSの相性がいい理由」を参照ください。

Chefで何ができる? クラウドで学んでみよう

 前回はApache Sparkを用いて、パーソナライズされた映画のレコメンドを行う仕組みを取り上げました。今回は、このような仕組みをどう効率よく作っていくか、過程に注目してみましょう。

 「Apache Spark」のように、いままでは実現できなかった問題を解消すると話題に上るような便利なプロダクトが登場すると、「本当に使えるのか」「課題を解消できる可能性はあるか」を実際に試してみたくなるものです。とはいえ、XXをダウンロードして設定を記述し、プログラムを起動して……、と手作業で環境を構築するのは手間がかかりますし、何よりも真新しいプロダクトを試す場合にはミスをしがちです。

 近年のシステム開発のトレンドでもある「継続的デリバリー」を実践したい場合には、自動化を目指すべきですから、なおさら手作業は敬遠すべきものでしょう。今回は、このような背景で登場したオープンソースソフトウェア「Chef」を取り上げます。

 これまでと同様に、まずChefが求められている背景や技術概要を説明します。次回、「LinuxONE Community Cloud」を使って、実際にChefを動かしてみる手順を紹介したいと思います。

たった4人で1万5000台のシステムを管理できる仕組み

 「システムを自動的に構築したい!」という要望は今に始まったものではなく、ITに関わる方であれば、誰もが一度は考えたことがある、ありふれたテーマではいないでしょうか。

 シェルスクリプトなどで複数のコマンドを一括で実行することは簡単です。しかし、「システムを丸ごと自動で構築しよう」と思うと、実はそれだけではいろいろな機能が足りません。これを補うために作られたのが「Chef」というわけです。 

 Chefには「たった4人で1万5000台のシステムを管理できた」という衝撃的な事例があります。この事例が2013年に開催されたイベント「ChefConf」で発表されたことで、以降、ITベンダーやユーザー企業がこぞってChefを利用するようになりました。

 なお、Chefの公式Webサイトを眺めているとパブリッククラウド環境で利用するようなイメージを持ちやすいのですが、実際にはオンプレミスでも問題なく利用できます。

Chefの構成、動作の仕組み

 Chefとは、システムを自動構築するプログラムを作成する際に役立つフレームワークです。構築する対象は、OSの構成変更やミドルウェアの導入、カスタマイズです。Chefは「OSが起動してから威力を発揮するツール」ですので、OS自体の導入には使うことができません。 

 Chefはもっぱら構築局面で役立つツールですが、構成変更を伴う作業(ディスクの容量追加やパッチ適用など)であれば運用局面でも使うことができます。一方、構成を変更しない作業(バックアップ取得や稼働監視など)には向いていません。Chef以外の運用管理ツールに任せるといいでしょう。 

 Chefは、システムを自動構築するプログラムを作る際に役立つ便利な機能を提供していますので、Chefを使えば、ゼロからシェルスクリプトを書くよりも早く構成を自動化するプログラムを開発できます。詳しくは後述します。 

 Chefには「Server(サーバ)」と「Client(クライアント)」があります。Chef Clientは、ユーザーが作成した自動化プログラムを実行するエージェントのような役割を担います。このため、自動構築したい全てのOSにChef Clientを導入しておく必要があります。

 Chef Clientは以下のWebサイトで公開されており、誰でもコマンド1つで簡単に導入できます。もし、「プロビジョニングは新しいOSを用意する際に行う」という運用ルールになっているのであれば、あらかじめひな型となるOSイメージにChef Clientを導入しておくといいでしょう。
 
●Chef Clientの導入イメージのダウンロード先
 
https://downloads.chef.io/chef  

 Chef Clientが実行する自動化プログラムは、Chefの用語でChef Cookbookと呼ばれています。Chef Clientを単体で実行する場合は、このChef Cookbookを事前に各OSに配布しておきます。Chef Cookbookの実体は1個のディレクトリですから、FTPやSCPなどのファイル転送の仕組みを使えば、簡単に配布できます。 

 執筆時点では、主要なLinuxディストリビューションに加えてWindowsやAIX、Mac OSなどをサポートしています。また、オンプレミスで使われているPower LinuxやLinux on z Systemsにも対応しています。

 パブリッククラウド、オンプレミスの両方でChefを使えば、まったく同じ構成のシステムを構築することができるというメリットがあります(図1)。

図1 同じChef Cookbookを使えば同じ構成のシステムを構築できる

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図1 同じChef Cookbookを使えば同じ構成のシステムを構築できる

 このように、大変便利なChefですが、Chef Clientを動かすOSの数が増えると、Chef CookbookをそれぞれのOS用に全て配布するだけでも大変な作業になる場合があります。そのような場合に備え、Chef Serverが用意されているのです。Chef Serverは「Chef Cookbookの倉庫」の役割をします。Chef ClientにChef Serverの場所を教えておくと、Chef Serverから必要なChef Cookbookをダウンロードして、自動的に実行するようになります。 

 Chef ClientとServerそのものは無償で利用できます。Chef Serverを冗長化したい場合などは有償アドオン機能を利用することもできます。また、Chefの保守サービスも利用可能です。詳しくは、以下のサイトをご覧ください。

●「クラウド・コンピューティングの自動化に特化した、システム総合フレームワーク」(クリエーションライン)
 https://www.creationline.com/chef

できるだけ正確にシステムを構築したい場合に有効

 Chefは、「『(1)できるだけ正確』かつ『(2)迅速』にシステムを構築したい場合」に有効なツールです。

 もちろん、正確に構築する必要ないシステムなんて、現実には皆無でしょう。実際、どのシステムでも事前にきちんと設計して、システム構築後はテストを念入りに行っています。過去に不具合に見舞われた経験を踏まえ、再発防止策も織り込まれているでしょう。 

 しかし、限られた期間と要員でヒューマンエラーをゼロにすることはなかなか困難です。ヒューマンエラーには、「設計漏れ」「構築時や本番移行時の作業漏れ」「 テスト時の確認漏れ」の他、「レビュー漏れ」もあり得ます。一般に、ヒューマンエラーを早期に見つけて修正するには、きちんとしたドキュメントの作成と第三者による綿密なレビューが有効とされていますが、それを行うためにはしっかりドキュメントを準備しておく必要があります。そうはいっても、システム構築のプロジェクトメンバーがドキュメント作成とレビューに追われて疲弊しているようでは、別のヒューマンエラーを引き起こしかねません。

 ヒューマンエラーを排除する根本解決策は、作業を機械に任せることです。作業を自動化するプログラムを作り、十分にテストした上で、実際のシステム構築作業をプログラムに委ねるのです。その際、必ずしも全自動や無人運転を目指す必要はありません。人間がミスをしない程度の作業量に収まるのであれば、半自動化するだけでも十分効果があります。 

できるだけ迅速に、品質良くシステムを開発したい場合に有効

 「迅速さ」については、サービスインまでのリードタイム短縮と問題の早期発見による品質向上の2つの視点で評価できるでしょう。

(1)新しいビジネスモデルを競合他社よりも早く市場に投入することによって、先行者利益を得たい、というビジネスニーズに応える

(2)システム構築プロジェクトにおいて、できるだけ早い段階で実機検証を行い、設計漏れ、設定漏れなどの問題を早期に検知・修正することによって、スケジュールの遅延などのプロジェクト上のリスクを最小化する

 あらかじめシステムを構築する手順を自動化しておけば、当然、構築にかかる時間を短縮できます。自動化によって手順が簡素化されていれば、システムを構築する担当者を新たに探してきたり、新人を育成したりする手間も最小限で済むでしょう。

 つまり、どこか別のタイミングで構築手順を自動化しておく必要はありますが、いったんそれができてしまえば、早くシステムをリリースして先行者利益を得る、という「正のサイクル」に入ることができるわけです。

 設計漏れ、設定漏れや製品のバグなどの問題は、実際に実機でテストして初めて分かるというケースが少なくありません。通常のプロジェクトでは、システムを設計、構築してから最後にテストを行います。従って、プロジェクトの終盤になって問題が発覚すると、サービスインが間近に迫っているため、高い温度感で問題対応に追われることになります。

 これを解消するには、プロジェクトの早い段階からシステム構築に着手するのが一番です。ただし、このアプローチを使う 際に注意しなければならないのは、後で設計が変更になったり、追加要件が発生したりしたときに、通常に比べて手戻りが発生しやすい点です。そこで、構築作 業を自動化しておけば、自動化プログラムを何回実行してもコストがかかりませんから、そうした手戻りのコストを恐れる必要がなくなるわけです。 

 システム構築において、正確さと迅速さの両方が求められる場面では、Chefは欠かせないツールといえるでしょう。

シェルスクリプトとChef、どちらを選ぶべきか〜選択基準は

 システムの構築を自動化する際、シェルスクリプトとChefのどちらを使うといいでしょうか。 

 結論からいうと、どちらを使った方が早く正確に自動化するプログラムを書けるか、に依存します。例えば、いくつかのパラメータを引数に指定して、決まりきったコマンドを実行するだけで作業が完結する場合は、シェルスクリプトで十分でしょう。 

 一方、多数のパラメータを渡したいときや、動的にファイルを生成したい場合は、Chefを使うことをお勧めします。Chefの以下のような便利な機能を使えば、シェルスクリプトよりも簡単に自動化するプログラムを作ることができるからです。

(1)多数のパラメータを効率よく渡す仕組み(ハッシュの利用)
(2)ファイルを効率よく作成する仕組み(テンプレートエンジンの利用) 

 ここからは少し細かい技術的な話になりますので、プログラミングに興味がない方はスキップしてください。上記の理由により、自動化プログラムの開発生産性はChefの方が高いことを理解すれば十分です。

(1)多数のパラメータを効率よく渡す仕組み(ハッシュの利用)

 ハッシュとは、添え字に数字以外のデータ型を指定できる配列のことで、データ交換の際によく使われる「JSON(JavaScript Object Notation)」などと互換性があります。このハッシュを利用することで、パラメータの内容と意味を紐付けて表現できるようになり、操作したいパラメータにたどり着くまでの道のりが簡単になります。

 例えば、「node」というハッシュ変数でパラメータを管理している場合、「プログラムa」の「コンポーネントb」の「パラメータc」に「def」を設定したい、という場合には、以下のようにシンプルに表記することができます。

node['program a']['component b']['parameter c'] = 'def'

 実はシェルスクリプトにも「連想配列」と呼ばれる、ハッシュと似た機能があります。しかし残念ながら、一般によく使われるシェルである「bash」の連想配列では、数字以外の添え字を複数指定することができないため、上記のような表記ができません。このため、シェルスクリプトで同じ処理を行う場合、「プログラムaのコンポーネントbのパラメータcのことをabcと呼ぶ」などのネーミングルールを別途設けた上で、以下のようにコーディングするしかありません。

node['abc'] = 'def'

 この方法の欠点は、実装するよりも前に「しっかり設計して、ネーミングルールを決める必要がある」という点です。この手続きが完了しなければコーディングに着手できません。コーディングして自動化することが目的だとしても、すぐには実行できないのです。また、このネーミングルールを知らない人には、このプログラムを読んでもまったく意味が分かりません。シェルスクリプトの連想配列を利用した実装ではこのように制約が多いため、パラメータの数が多い場合は、ハッシュを使うべきでしょう。パラメータを受け渡しする処理の記述が大幅に簡素化し、可読性(プログラムの読みやすさ)も格段に上がります。

(2)ファイルを効率よく作成する仕組み(テンプレートエンジンの利用)

 テンプレートエンジンとは、ファイルのひな型(テンプレート)を用意しておき、そこにパラメータを与えると、自動的にパラメータの内容を反映したファイルを生成してくれる機能のことです。Webではよく使われている仕組みで、動的なWebページは、このテンプレートエンジンの仕組みを使って生成されています。システム構築においてファイルを作成する場面は非常に多いため、テンプレートエンジンが使えるのはChefの大きなメリットです。 

 一方、シェルスクリプトでは、テンプレートエンジンが実装されていません。このため、地味な文字列結合や整形処理を行ってから、echoコマンドでファイルの内容を書き出すなど、手間のかかる方法でコーディングしなければなりません。

 パラメータの数が少なく、生成するファイルのサイズが小さいうちは、この方法でもいいのですが、パラメータの数が多く、大きなサイズのファイルを生成するような場合は、プログラムの開発生産性に大きな影響を与えてしまいます。このような場合は、積極的にテンプレートエンジンを使うべきでしょう。

図2 テンプレートエンジンを利用した場合のファイル生成の流れ

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図2 テンプレートエンジンを利用した場合のファイル生成の流れ
図3 テンプレートエンジンを利用しない場合のファイル生成の流れ

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図3 テンプレートエンジンを利用しない場合のファイル生成の流れ

シェルスクリプトのメタ機構としても機能できるChef

 なお、Chefには、シェルスクリプトを実行する機能があります。これを踏まえると、Chefを使ってパラメータをハッシュで受け取り、テンプレートエンジンを使ってパラメータを埋め込んだシェルスクリプトを生成してから、それを実行するという合わせ技もあります。こうした選択肢も念頭に置きながら、自動化プログラムの開発にChefを使うかどうかを考えるとよいでしょう。

まとめ

 今回は、システムを自動構築する技術として注目を集めているChefについて、これが求められている背景や技術概要を説明しました。 

 本連載で取り上げている「LinuxONE」では、ミッションクリティカルなシステムが多数稼働するプラットフォームです。ミッションクリティカルなシステムでは正確さと迅速さの両方が求められるため、今後、ますますChefが利用されるケースが増えてくるでしょう。 

 次回は「LinuxONE Community Cloud」を使って、実際にChefを動かしてみる手順を紹介します。お楽しみに!

会員限定で「読者からのコメント」が読み書きできます! 「読者からのコメント」は会員限定の機能。会員登録を行い、ログインすると読者からのコメントが読み書きできるようになります。

会員登録(無料)・ログイン

Myリストへ

この記事をtweetする このエントリーをはてなブックマークに追加


この寄稿記事に掲載している情報は、掲載日時点での情報となります。内容は変更となる場合がございますのでご了承下さい。また、「Key Conductors」の寄稿記事及び当該記事に寄せられたコメントについては、執筆者及びコメント投稿者の責任のもと掲載されているものであり、当社が、内容の最新性、真実性、合法性、安全性、適切性、有用性等を保証するものではありません。


30009750


IT・IT製品TOP > Key Conductors > 清水 大紀(日本アイ・ビー・エム株式会社) > シェルだけでは難しいインフラ自動構成管理ができる「Chef」とは

このページの先頭へ

キーマンズネットとは
オープンソースソフトウェアを活用したミッションクリティカルなシステムの提案活動に従事するセールスエンジニア。パブリッククラウド/オンプレミスを問わず、あらゆるシステムでインフラ構築/運用の自動化を推進するため、「Chef」技術コミュニティーのリーダーや自動化プログラムの開発リーダーなど、幅広い活動を展開している。

ページトップへ