Server specのご紹介
-
Upload
akira-kaneda -
Category
Technology
-
view
723 -
download
2
Transcript of Server specのご紹介
ServerSpecのご紹介LT駆動勉強会14
お約束
・本スライドで出てくる事象はフィクションです。
所属組織その他特定の事象に言及しているわけではないですし、実際にあったわけではないかもしれません。
ServerSpecとは?
ServerSpecとは、サーバの状態をテストするため
のフレームワークです。
ServerSpecは、テスト対象のサーバに対してSSHログインしてテストするので、
ServerSpec用に何か特別なエージェントをインス
トールする必要がありません。
サーバのテストって???
そもそもサーバ構築時、テストしてますか?
・phpinfoが出ればOK?・DBがつながればOK?・WordPressが動けばOK?・プロセスが起動していればOK?
そもそもサーバ構築ってどうやってますか?
・コピペ駆動
・手順書(エクセルやWikiとか紙とかテキストとか)
・ChefやAnsibleなど構成管理
・シェルスクリプト(!)
そもそもサーバの要件って決まってます??(WordPressが動くサーバ用意して。など)
ありがちなミス
● いままで問題なく動いていたのに、再起動したら SSHもWebもつながらなくなった!!○ iptablesの保存し忘れ○ Apacheの自動起動設定もれ
ありがちなミス
● 気がついたらDBサーバの時計がズレている。○ NTPサービス起動忘れ。
手順書に漏れていたり、どこかのサイトをコピペするとやりがち。ちなみに、DBサーバの時刻がずれている時、急に時刻を合わせると、酷い目に合う可能性があります。メールサーバも同様。
つまり
● サーバの構築は構成管理などで(ある程度)自動化できるけど、構築したサーバのテストも必要。
● 設定や構成管理のミスはそれ単体のテストでは検証できない。(ChefSpecをパスしたからと言ってサーバが要求通りの動作をしている訳ではない。)○ サーバもテスト駆動でやろう。
ServerSpecインストール
1:Rubyをインストール
2:gem install serverspec3:ServerSpecのテストコードを出力したいディレク
トリでserverspec-initを実行。
4:質問に答えると、ひな形が生成される。
Winな人はCygWinでもOK。サーバ側はSSHさえつながればOK.
ServerSpecインストール
5:~/.ssh/configにssh接続情報をセットHost test.org
HostName example.comIdentityFile ~/.ssh/example.com.
id_rsaUser webmaster
テストコードの例require 'spec_helper'
describe package('httpd'), :if => os[:family] == 'redhat' do it { should be_installed }enddescribe port(80) do it { should be_listening }end
割と簡潔でわかりやすくかける。OSの差異はある程度吸収してくれる。
テストって言われても・・・
何をテストしていいのか分からない。という場合は、ServerSpecのサイトにあるリソースを眺めてみて、何がテストできるのか?から追いかけるのも手です。
ServerSpecは既存のサーバに影響を与えないので、気になるところや今動いているものが動いているテストを書いてみる。等から始めると良い。
テストすると何がいいの?
・テストコード自体が生きた資料(チェックリスト)になる。
・プログラムと違い、サーバのテスト項目はある程度決まっているので、作ってしまえば、他のサーバに流用が効く。
・不具合が起こった時何が問題なのかが分かる。
ServerSpecでテストできる範囲
・ServerSpecはSSHでつないで各種コマンドの実行結果よりチェックを行う。
→サーバ内部からのチェック。
・複数台のサーバと連携しているか?外部からつながるか?等外部からのチェックはZabbixなどを使う。
ServerSpecのちょっと残念なところ
・デフォルトではサーバごとにテストを書かないといけない。
→本当は機能や役割ごとにテストを書いて、インストールされた機能毎にテストを組み合わせて適用したい。
→設定いじれば結構柔軟にカスタム出来そうだけど、rakeやRubyの知識が必要(本家にカスタム例あり)
まとめ
・構築手順書やマニュアルの類は所詮メンテされないし、読み手を選ぶ。
(サーバ建てる毎に手順書やマニュアル作りますか??)
・構成管理やテストコードなど、インフラをコードで記述することにより、生きた手順書、チェックリストを作成することができる。
・バージョン管理ができるし、差分チェックもできる。
・自動化できる。他サーバに流用できる。
・テストをすることによりある程度の安心感を得る。
参考サイト
・serverspecを使ってサーバの状態をテストしてみよう
・ServerSpec
・serverspec の論文公開します