Server specのご紹介

17
ServerSpecご紹介 LT駆動勉強会14

Transcript of Server specのご紹介

Page 1: Server specのご紹介

ServerSpecのご紹介LT駆動勉強会14

Page 2: Server specのご紹介

お約束

・本スライドで出てくる事象はフィクションです。

所属組織その他特定の事象に言及しているわけではないですし、実際にあったわけではないかもしれません。

Page 3: Server specのご紹介

ServerSpecとは?

ServerSpecとは、サーバの状態をテストするため

のフレームワークです。

ServerSpecは、テスト対象のサーバに対してSSHログインしてテストするので、

ServerSpec用に何か特別なエージェントをインス

トールする必要がありません。

Page 4: Server specのご紹介

サーバのテストって???

そもそもサーバ構築時、テストしてますか?

・phpinfoが出ればOK?・DBがつながればOK?・WordPressが動けばOK?・プロセスが起動していればOK?

Page 5: Server specのご紹介

そもそもサーバ構築ってどうやってますか?

・コピペ駆動

・手順書(エクセルやWikiとか紙とかテキストとか)

・ChefやAnsibleなど構成管理

・シェルスクリプト(!)

そもそもサーバの要件って決まってます??(WordPressが動くサーバ用意して。など)

Page 6: Server specのご紹介

ありがちなミス

● いままで問題なく動いていたのに、再起動したら SSHもWebもつながらなくなった!!○ iptablesの保存し忘れ○ Apacheの自動起動設定もれ

Page 7: Server specのご紹介

ありがちなミス

● 気がついたらDBサーバの時計がズレている。○ NTPサービス起動忘れ。

手順書に漏れていたり、どこかのサイトをコピペするとやりがち。ちなみに、DBサーバの時刻がずれている時、急に時刻を合わせると、酷い目に合う可能性があります。メールサーバも同様。

Page 8: Server specのご紹介

つまり

● サーバの構築は構成管理などで(ある程度)自動化できるけど、構築したサーバのテストも必要。

● 設定や構成管理のミスはそれ単体のテストでは検証できない。(ChefSpecをパスしたからと言ってサーバが要求通りの動作をしている訳ではない。)○ サーバもテスト駆動でやろう。

Page 9: Server specのご紹介

ServerSpecインストール

1:Rubyをインストール

2:gem install serverspec3:ServerSpecのテストコードを出力したいディレク

トリでserverspec-initを実行。

4:質問に答えると、ひな形が生成される。

Winな人はCygWinでもOK。サーバ側はSSHさえつながればOK.

Page 10: Server specのご紹介

ServerSpecインストール

5:~/.ssh/configにssh接続情報をセットHost test.org

HostName example.comIdentityFile ~/.ssh/example.com.

id_rsaUser webmaster

Page 11: Server specのご紹介

テストコードの例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の差異はある程度吸収してくれる。

Page 12: Server specのご紹介

テストって言われても・・・

何をテストしていいのか分からない。という場合は、ServerSpecのサイトにあるリソースを眺めてみて、何がテストできるのか?から追いかけるのも手です。

ServerSpecは既存のサーバに影響を与えないので、気になるところや今動いているものが動いているテストを書いてみる。等から始めると良い。

Page 13: Server specのご紹介

テストすると何がいいの?

・テストコード自体が生きた資料(チェックリスト)になる。

・プログラムと違い、サーバのテスト項目はある程度決まっているので、作ってしまえば、他のサーバに流用が効く。

・不具合が起こった時何が問題なのかが分かる。

Page 14: Server specのご紹介

ServerSpecでテストできる範囲

・ServerSpecはSSHでつないで各種コマンドの実行結果よりチェックを行う。

 →サーバ内部からのチェック。

・複数台のサーバと連携しているか?外部からつながるか?等外部からのチェックはZabbixなどを使う。

Page 15: Server specのご紹介

ServerSpecのちょっと残念なところ

・デフォルトではサーバごとにテストを書かないといけない。

→本当は機能や役割ごとにテストを書いて、インストールされた機能毎にテストを組み合わせて適用したい。

→設定いじれば結構柔軟にカスタム出来そうだけど、rakeやRubyの知識が必要(本家にカスタム例あり)

Page 16: Server specのご紹介

まとめ

・構築手順書やマニュアルの類は所詮メンテされないし、読み手を選ぶ。

(サーバ建てる毎に手順書やマニュアル作りますか??)

・構成管理やテストコードなど、インフラをコードで記述することにより、生きた手順書、チェックリストを作成することができる。

・バージョン管理ができるし、差分チェックもできる。

・自動化できる。他サーバに流用できる。

・テストをすることによりある程度の安心感を得る。

Page 17: Server specのご紹介

参考サイト

・serverspecを使ってサーバの状態をテストしてみよう

・ServerSpec

・serverspec の論文公開します