OSの設定やミドルウエアのインストールなどサーバー環境の構築を自動化するChef。ただし、実際に設定通りに環境が構築されたかどうかのテストは対象外で、これには手作業が必要だった。Serverspecは、この課題の解決策となる。
「サーバーのOSやミドルウエアを設定してテストする環境構築の作業を、複数のツールを組み合わせることで自動化した。数十台のサーバーでも、数分で終えられる」。NTTデータの錦織(にしごり)真介氏(第三法人事業本部 交通・流通事業部 サービスインテグレーション担当 課長)はこう言って胸を張る。
錦織氏らのチームは当初、Chefを単体で使い始めた。2013年春のことである(図1上)。
Chefは、「クックブック」や「レシピ」と呼ぶ設定コードの記述通りにサーバー環境を構築するが、実際に設定通りの環境が構築されたかどうかをテストする機能は備えていない。そのため錦織氏らは手作業で確認した。「パラメーターシートを用意し、項目を一つずつ目視で確認すると、1台当たり数時間を要した」(錦織氏)。
そこで同年夏に、Chefと組み合わせてServerspecの利用を開始した。Serverspecは、インストールされたミドルウエアの有無、OSやミドルウエアの設定内容、起動しているプロセスなどを自動的にテストするツールだ。
錦織氏らのチームは、Chefによるサーバー環境構築と、Serverspecによるテストを、一連の作業として自動化するため、Jenkins、Chef用のリモートコマンド実行ツール「knife」も組み合わせた仕組みを作った(図1下)。Jenkinsが司令塔になってChefとServerspecに作業を指示する形態であり、knifeはJenkinsからChefへの指示を仲介する。
インフラ担当者がJenkinsでジョブを実行すると、Jenkinsがknifeを介してChefに指示。Chefは設定コードを実行し、サーバーに対してミドルウエアのインストールや設定を行う。Jenkinsは、Chefから作業完了のメッセージを受け取ると、Serverspecに指示。Serverspecはテストコードを実行する。Serverspecによるテストも完了すると、Jenkinsは作業完了をインフラ担当者にメールで伝える。
錦織氏らのチームは、この一連の流れを、Jenkinsのプラグイン「Build Pipeline Plugin」を使って可視化した。作業の進行状況やエラーの有無をブラウザーで確認できる。
錦織氏は「Serverspecによって、サーバー環境構築のテストの7~8割は自動化できた。ただ、サーバーの電源を落とした場合の挙動など、ハードウエアがかかわるところは自動化できておらず、手動でテストしている」と説明する。