変化の激しいビジネスに対応するためにシステムやサービスには、これまで以上に迅速な導入や安定した運用が求められるようになってきています。このような要求を満たすために、仮想環境やクラウド環境を基盤として利用し、サーバの構築プロセスや構成管理プロセスの効率化のためにChefやPuppet、Ansibleといった自動化ツールが活用されるようになってきています。
このように自動処理で手軽にシステムやサービスをセットアップできるようになると、構築時の人為的ミスを防げるようになるなど便利になる反面、内部で実施されている処理が人の手から離れて、把握しづらくなる傾向にあります。また自動化の導入に際しては、システムが意図した状態に作り上げられているのかを確認する作業も重要になってきます。特に大規模で複雑な環境において、この確認作業を手作業で実施することは、高コストの要因となってしまいます。
参考:
ThinkIT 連載「システムを自動構築するためのOSSフレームワーク、Chefを使ってみよう!」
ThinkIT 「第3回 クラウドでの設定管理ツールPuppet」
Serverspecの登場
このような背景から、自動構築した環境が本当に意図した通りにできあがっているかの確認作業を自動的に行えるようにするツールが登場しました。それがこの連載で紹介する「Serverspec」です。
Serverspecの登場以前にも、自動構築プロセスに対して処理に間違いがないかをテストするための方法は存在していました。たとえばChefの場合、以下のような様々なツールを活用してテストが実施できます。
| ツール | テスト可能なこと |
|---|---|
| knife cookbook test | 記法が間違えてないかの記法チェックツール |
| foodcritic | より適切な記述を支援するための構文チェックツール |
| chefspec | 記述したコードによって意図した処理が実施されるかの事前チェックツール |
これらのテストツールを組み合わせることで、自動構築用に作成したコードが正しく実行されるかどうかを事前に確認してから実行に移せるようになります。しかし、自動化処理の記述内容として正しかったとしても、実行時に何らかの要因により、記述したコードの通りに処理が実行されないといったケースも発生し得ます。
そこで効果を発揮するのが、できあがった環境に対して、その環境が意図した通りの状態で稼働しているかどうかをテストする「Serverspec」です。
Serverspecの概要
Serverspecは宮下剛輔氏によって開発されたサーバの状態をテストするためのフレームワークです。
Ruby実装で、RubyのテストフレームワークであるRSpecの書き方に準拠しています。2014/7/14時点での最新バージョンは、1.10.0です。本記事では、Serverspecのバージョン1.10.0 および Serverspecのコアのテスト部分を切り出したSpecinfraについてはバージョン1.20.0を対象に解説します。
Serverspecでできること
Serverspecの利用方法を紹介する前に、Serverspecを利用することでどういったことができるようになるのかをまとめます。
Serverspecでできることは、大きく分けて以下の2つです。
- 意図した処理が環境に適切に反映されていることを確認
- 意図していない影響が環境に対して発生していないことを確認
意図した処理が環境に適切に反映されていることを確認
サーバにあるパッケージがインストールされているか、TCPの何番ポートがLISTEN状態になっているか、ファイアウォール設定で、あるIPアドレスからのアクセスが遮断される設定が入っているかなど、意図した設定通りにサーバが稼働しているかどうかを確認することができます。これにより、ChefやAnsible等の自動構築処理に対して、正常に稼働していることを保証できます。
意図していない影響が環境に対して発生していないことを確認
サーバになんらかの変更作業を施した結果、意図しない影響がその他の箇所で発生していないかどうかを確認することもできます。たとえばiptablesの設定を変更した結果、意図せずあるプロセスに接続ができない状態になってしまったなどの状況を確認できます。
- この記事のキーワード