2015年5月28日木曜日

IIS8.5のセキュリティ設定について


このところ諸事情によりIIS8.5でphpを動かすことを強いられているんですが(涙
IISっていつの間にかロックダウンツール無くなってたので、デフォ設定でセキュアなんだ。流石だなぁと思ったらまさかSSLv2が有効かだったとは…

http://blog.shibayan.jp/entry/20141015/1413355076

Apacheのセキュリティ設定は結構サイトがあるけど、IISのセキュリティ設定ってまとまってるサイトどこかに無いかな?
ということで、今日もしばやんのブログに助けられた。
http://blog.shibayan.jp/entry/20130518/1368861454

2015年5月10日日曜日

ServerSpecでテスト内容を共通化した雛形を作成してみた。

最近ServerSpecが面白くて、色々弄繰り回しています。

ServerSpecは、デフォルトだと1サーバごとにテストを書いていく構成になります。
これだと、サーバA、サーバBそれぞれにApacheのテストを書くとすると、同じものを2つコピペしないといけなく、なんとなく無駄です。

というわけで、公式にも書いてあるのですが、テストコードを機能ごとに共通化し、テストするサーバごとに使い回しが出来るようにした雛形を作成したので、このあたりに置いておきます。

ついでに、AmazonLinuxがRedhatと判定されると、AmazonLinuxのバージョンによって、Apacheのパッケージ名が違ったりする場合の条件分岐が辛かったので、ServerSpecの中にあるSpecInfraに手を入れて、AmazonLinuxの場合、Amazonと判定させかつ、バージョン番号を取得できるようにしました。
ただ、この修正は既存のテストコードに影響が出そうなので、プルリクするかどうかは悩み中・・・


*2015/05/12 追記
テストに引数を渡せることが分かったので、引数を渡すサンプルを追加。
これで、ポートやパッケージなどのテストを共通化できるようになった。

*2015/06/16 追記
AmazonLinux判定とバージョン取得のプルリクを投げてみたところ、本家にて再実装されました。
ServerSpecに手を入れなくてもテストコードをうごかせます。

2015年5月7日木曜日

LT駆動開発14でServerSpecを紹介してきた。

前日夜にLTしないのか?と圧力お誘いがあったので、
3時間ばかし徹夜して、LT駆動開発14でServerSpecについて軽く紹介LTしてきました。

スライドはこちら。



プログラムの世界ではTDD(テスト駆動開発)と呼ばれる手法があり、
インフラがコードで制御できるのであれば、そのテストをするのが当たり前。という流れになってきています。

私自身、インフラの自動化をするに当たり、どうしても手作業でしないといけない箇所や、
勘違い、凡ミスが発生し、テストの必要性は認識していましたが、
テストの書き方がわからない。そもそも良く分からない。
という正直面倒くさいありがちな理由で後回しにしていました。

しかし、Chefで何十台とサーバを構築していると、Chef的には正しいのに、サーバがうまく動かないということが時々起こります。
大抵はドキュメントルートのパスをミスっていたなど凡ミスなんですが・・・

なので、いい加減テスト真面目にしないとなぁ。とChefDK ハンズオン with すごい広島で勉強したり、自宅で復習したりしていたのですが・・・
ChefのテストはChefSpec、サーバのテストはServerSpecとほぼ同じ内容を別のテストでやるのがとても面倒で(ぉ
まずは簡単そうなServerSpecからはじめました。
ちなみに、何でわざわざChefと、それで作られたサーバをそれぞれテストしないといけないのか?ですが、Chefのレシピが正しくても、それを組み合わせて構成したサーバが要件どおり動くのかは別問題だからです。
ChefSpecを単体テストというなら、それを複数結合して構成したサーバはServerSpecで結合テストするイメージです。
あと、レシピ以外で手動構成した箇所はServerSpecでないとテストできませんね

ServerSpecのいい点は、SSHさえつながれば、特別なエージェントなど不要。という点です。
つまり、今動いているサーバに影響を及ぼすことなくテストをすることが出来ます。
また、Windowsな人はCygwin上からでもテストを実行することが出来ます
はい。Winだからとやらない理由がなくなりました(笑)

肝心のテストコードの書き方ですが、Apacheのテストコードが雛形として生成されるので、
それと、リファレンスを見ながらで何とかなります。
プログラムと違い、サーバは機能がある程度決まっているので、テストする項目も決まってますが、
いわゆる境界テストのようなものはサーバにはないので、何を何処までテストするのか?というのが今悩んでいるところです。

Chefで担保できるところ(設定ファイルとか)はChef側で、サービスの登録や起動の有無などはServerSpecで。という感じがいいのかなぁ・・・
ま、書いたテストは消せるけど、無いテストはテストできないので、今はとりあえず思いつく箇所のテストを書いています。勉強にもなりますしね。