Serverspecについての簡単なまとめと
EC2上でServerspecをインストールして実行するまでを記述。
Serverspecとは何か
- サーバの状態をコードにより自動的にテストするツール
- 構築したサーバが要件を満たしているかどうか確認できる
- Black Duck社が発表した2013年のオープンソースルーキーズオブザイヤー
- Rubyで実装されている
- テストはRSpecで書ける(Server+RSpec=Serverspec)
- Serverspecをインストールしたサーバ自身をテストするだけでなく、ネットワーク経由(ssh/WinRM)で外部の複数のサーバに対してもテストが可能(以下画像参照)
- http://tech-sketch.jp/mt/2014/04/28/serverspec-overview.png
Serverspecの目的
- テスト駆動によるインフラのコード開発
- サーバ構築後の確認作業の自動化
- 稼働しているサーバの監視
- サーバの再起動時の状態確認
インストール
- gemで公開されているので以下のコマンドでインストールできる
sudo gem install serverspec
最初にやること
- serverspec-init コマンドを実行する
以下例を参考。
ec2-user@serverspec-host$ serverspec-init
Select OS type:
1) UN*X
2) Windows
Select number: 1 # EC2なので1を選択
Select a backend type:
1) SSH
2) Exec (local)
Select number: 2 # ローカルで実行するので2を選択
# 以下ファイルができる
+ spec/
+ spec/localhost/
+ spec/localhost/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec
生成されたファイルの中にRakefileがある。
Serverspecの実行にはRakefileを読み込む必要があるので
rake をgemでインストール
sudo gem install rake
Apache HTTP Serverを起動する
sudo service httpd start
以下コマンドにて実行
ec2-user@ip-172-31-15-14$ rake spec
/usr/bin/ruby2.0 -I/usr/local/share/ruby/gems/2.0/gems/rspec-support-3.4.0/lib:/usr/local/share/ruby/gems/2.0/gems/rspec-core-3.4.0/lib /usr/local/share/ruby/gems/2.0/gems/rspec-core-3.4.0/exe/rspec --pattern spec/localhost/\*_spec.rb
Port "80"
should be listening
Finished in 0.01063 seconds (files took 0.30423 seconds to load)
1 example, 0 failures
まとめ
- RSpecの理解が深まる
- 副次的な効果として、Serverspecを調べることで知らなかったミドルウェアの使い方を知れる(netstatコマンドとか)
- CIに組み込んでおけば、EC2で空けちゃいけないポートが空いていないかを確認することに利用できそう。
- またテストを書いておけばそのサーバがどういった要件を満たしているのかが分かるため便利
- Serverspecのoreilly本 読む
- Infratasterも使えそう
- Serverspecはサーバの内部をテストするのに対して、Infratasterは、外部から見た場合の振る舞いをテストする。もうちょっとアプリケーションよりのテストができるっぽいです。
- HTTPリクエストの応答が200か確認したり、MySQLへの問い合わせた結果を比較したりなどが確認できる
- 次はこっち(Infrataster)調べたい。