テストフレームワークInSpecをとりあえず触ってみた

2 min読了の目安(約2000字TECH技術記事

概要

先日、IBMが主催するイベント「Enterprise Server Meetup」の第2回が開催されました。
第2回のテーマがインフラ運用・構築の自動化ということで、個人的に興味のある内容でしたので参加してみました。
その中で初めて目にしたツールがありましたので、今回は簡単に触ってみた感想についての日記です。

InSpecとは

構成管理ツールChefの開発で知られているChef社がOSSとしてRubyで開発されているテストフレームワークです。→公式リファレンス
テストフレームワークとして有名なServerspecと互換性がありますが、後発の利点としてよりセキュアであったり、AWSリソースに対するサポートが豊富である点が上げられます。
初めて使うので、まずは公式リポジトリのREADMEに記載されているインストール方法とサンプルコマンドを実行してテストを試してみます。https://github.com/inspec/inspec#chef-inspec-inspect-your-infrastructure

インストール手順

上記のリポジトリ内に紹介された手順で進めていきます。環境はCentOS7を使いました。
InSpecはRubyで記述されているため、まずはRubyをインストールします。(2.4以上のバージョンとのこと)

$ yum -y install ruby ruby-devel make gcc gcc-c++
$ gem install inspec-bin
$ gem install inspec

インストールができましたので、続いて簡単なテストコードを記載します。

httpd.rb
describe package('httpd') do
  it { should be_installed }
end

Apacheがインストールされているか確認するためのテストコードです。
これをinspec exec httpd.rbで実行することができます。

$ inspec exec httpd.rb

Profile: tests from httpd.rb (tests from httpd.rb)
Version: (not specified)
Target:  local://

  System Package httpd
     ✔  is expected to be installed

Test Summary: 1 successful, 0 failures, 0 skipped

これはローカル上で実行しましたので、今度はリモート先で同じようにテストができるか確認します。
リモート先でテストを実行する場合は-tオプションでssh接続を指定するイメージです。
inspec exec httpd.rb -t ssh://user@IPaddress -i pubkey

失敗

リモート先でもApacheをインストールしてコマンドを実行しましたが、エラーがでました。

$ inspec exec httpd.rb -t ssh://ec2-user@172.31.21.95 -i <pubkey>

Profile: tests from httpd.rb (tests from httpd.rb)
Version: (not specified)
Target:  ssh://ec2-user@172.31.21.95:22

  System Package httpd
     ×  is expected to be installed
     expected that `System Package httpd` is installed

Test Summary: 0 successful, 1 failure, 0 skipped

リモート先マシン情報

[ec2-user@ip-172-31-21-95 ~]$ sudo service httpd status
httpd (pid  2920) is running...

リモート先のPCにはちゃんとApacheがインストールされていて起動しているのは間違いないのですが、どうしてでしょうか?
InSpecの使い方はまだ触りの段階でまだまだわからないことだらけですので、今後も情報を調べてせめてリモート先のマシンにテストを行えるようにするところまで理解しようと思います。