Serverspecでサーバー構成を楽してミスなくテストする

技術

こんにちは。にっしーです。

前回のChefに引き続き、今回もサーバー構築作業の自動化ネタです~。

Serverspecでサーバー構成を楽してミスなくテストする_画像1

皆さんは構築したサーバーの構成が設計通りになっているかの確認をどのように行っていますか??
設計書を見ながら手作業で確認していますか?

対象のサーバーが1台ならそれでもよいでしょうが、大規模で複雑な環境の場合どうでしょう?
確認作業のコストは高くなりますし、確認漏れも発生するかもしれません。

なので、Serverspec を使って自動化してみました。

 

Serverspecってなに??

Serverspec はサーバーの状態をテストするためのフレームワークです。

Serverspec を利用することで、「意図した設定がサーバーに反映されているか」、「意図していない設定がサーバーに反映されていないか」などを確認することができます。

Serverspec はSSH接続を経由したリモート実行と、テスト対象のサーバーにログインして実行するローカル実行の2つの実行方法があり、今回はローカル実行について書きます。

 

Serverspec のインストールと初期設定

Serverspec はgemパッケージとして配布されています。

上記コマンドでもインストールできますが、Serverspec はいくつかのモジュールに依存しているので、今回は bundler を使って依存関係の解決とバージョン管理をおこなってインストールします。

※ インストールを行うためには、Ruby 及び rubygems がインストールされている必要があります。
  Ruby 及び Rubygems のインストール手順については、ここでは割愛します。

・Ruby のインストール 
https://www.ruby-lang.org/ja/documentation/installation/  

・Rubygems のインストール 
https://rubygems.org/  

 

 icon-check bundler のインストール

まず、bundler をインストールします。

インストールが完了したら、Serverspec を実行する作業ディレクトリを作成します(任意の場所でOKです)。

Gmfile を以下の内容で作成します。

 

 icon-check Serverspec のインストール

bundler を使って Serverspec のインストールを実行します。

インストールできたので初期設定コマンドを実行します。

 

テストコードの作成

Serverspec 実行時に読み込まれるテストコードは Rakefile で定義します。

serverspec-init コマンドを実行に作成される標準の Rakefile では、spec ディレクトリ以下の各ディレクトリにある、xxx_spec.rb が読み込まれ実行されます。テストコードの追加は、xxx_spec.rb の命名規則で、「spec/テスト対象のサーバー名/」配下に作成します。

 

今回は、以前に私が書いた Chef の記事で紹介した apache インストールレシピ  で、正しく apache がインストールされたかを Serverspec で確認してみます。

以下のサンプルでは、テスト対象のサーバー名を localhost としています。Serverspec を実行するサーバーに合わせて読み換えてください。

 

テストの実行

テストコードを作成したら rake コマンドでテストを実行します。

serverspec-init コマンドを実行すると、サンプルのテストコード( spec/localhost/sample_spec.rb )が作成されています。

Serverspec を実行するサーバーの環境によっては、このサンプルコードが失敗します。失敗する場合は、削除するか、別のディレクトリに移動してください。

実行結果が、0 failures となっていればOKです!

 

下記は 81 番ポートで apache を起動して、テストを実行した結果です。

結果が、1 failures となり、エラーになった箇所の情報が表示されます。

 

簡単ではありますが、このような感じで Serverspec を使って、サーバー構成を自動でテストすることができます。

今回は Serverspec 導入までということで、サービスの起動と使用ポートの確認程度の簡単なテストコードですが、もっと細かな確認も Serverspec で自動化することができます。

 

機会があれば応用編の記事を書く・・・かも!?

Chef と組み合わせで使うと便利なので是非使って見てくださいー!

 

̃Gg[͂ĂȃubN}[Nɒlj