itamae + serverspecで テスト駆動インフラやってみた #shibuyarb
TRANSCRIPT
![Page 1: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/1.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
itamae + Serverspecでテスト駆動インフラやってみた
2015/03/18 shibuya.rb@sue445
![Page 2: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/2.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
sue445
● drecom○ 社内ツールとか社内ライブラリとか○ サーバサイドをアプリからインフラまで浅く広く
見守り業務○ PO (Precure Ojisan)
● RubyKaja 2014 @Shibuya.rb
自己紹介
![Page 3: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/3.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
【今期の嫁】キュアトゥインクル
![Page 4: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/4.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
今期の黄色は肩背中が丸出し!!!!
![Page 5: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/5.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
【本妻】キュアピース
![Page 6: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/6.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● 経緯
● itamaeについて
● Serverspecについて
● 実際のテスト駆動インフラの流れ
● itamaeレシピを社内に公開した
● 参考書籍
● 所感
Agenda
![Page 7: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/7.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● 【目的】Railsミドル全部入りのOpenStackのJenkins Slave
のスナップショットを作りたかった
● ミドル全部入りならインフラがchefで作ったスナップショットが
あるとの情報
● 差分はJenkinsユーザの作成とrbenvのインストールくらいあ
ればよさそう○ が、インフラのchefのレシピはカオスすぎて素人にはハードル高かった
● 全部入りスナップショット対して差分をitamaeでプロビジョニ
ングすることに
● せっかくなので今流行のテスト駆動インフラに挑戦してみた
経緯
![Page 8: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/8.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
itamae
● クックパッドが作ったプロビジョニングツール
○ http://itamae.kitchen/
○ https://speakerdeck.com/ryotarai/itamae-infra-as-
code-xian-zhuang-que-ren-hui
● Ruby製、シンプルで軽量なChefみたいなやつ
● DSLなので記述がシンプル
● DSLもRubyのコードなので適度にリファクタリングできる
● プラグインをgemから取り込める
○ 依存性をbundlerで管理できる
○ rubygems.orgに公開していればみんなが使える
![Page 9: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/9.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● @mizzy氏が作ったインフラ構成をテストするためのツール
○ http://serverspec.org/
○ http://www.oreilly.co.jp/books/9784873117096/
● Ruby製
○ RSpecベースだけどテンプレをコピペするだけなので
RSpec使ったこと無くても問題ない
● 特定のプロビジョニングツール(itamaeとかChefとかPuppet
とかAnsible)に依存しないで使える
Serverspec
![Page 10: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/10.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● OS毎のコマンドの違いを吸収するgem
○ https://github.com/serverspec/specinfra
○ Debianならapt-get install使うとか、yumならyum instll
使うとか
● Serverspecから切りだされてgem化されている
○ capistranoとsshkitのような関係
● itamaeもSpecinfraに依存しているので、Specinfraの中身
を知ってたらitamaeとSercerspecの両方で役に立つ
Specinfra
![Page 11: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/11.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
1. インフラの確認項目をテストコードで書く
2. 期待したエラーが出ることを確認 (Red)
3. サーバで適用したいインフラコードを書く
4. テストコードが通っていることを確認(Green)
5. ダメなら3に戻る
6. 必要ならリファクタリング (Refactor)
7. 1に戻る
実際のテスト駆動インフラの流れ
![Page 12: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/12.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
http://www.slideshare.net/t_wada/the-spirit-of-tdd/27
テスト駆動インフラでもTDDの黄金の回転
![Page 13: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/13.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● 新しいサーバを作ると自分のhomeディレクトリがないので手
軽に作りたい
【例】自分のhomeディレクトリを作る
![Page 14: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/14.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
describe file("/home/sueyoshi_go") do
it { should be_directory }
it { should be_mode 700 }
it { should be_owned_by "sueyoshi_go" }
it { should be_grouped_into "drecom" }
end
TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
Serverspecのテストコード(myhome_spec.rb)
![Page 15: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/15.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
Serverspecのテストコード(myhome_spec.rb)
/home/sueyoshi_go が ディレクトリで パーミッション700で ownerがsueyoshi_go で drecom groupに所属していること
describe file("/home/sueyoshi_go") do
it { should be_directory }
it { should be_mode 700 }
it { should be_owned_by "sueyoshi_go" }
it { should be_grouped_into "drecom" }
end
TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
![Page 16: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/16.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
Serverspecのテストコード(myhome_spec.rb)
/home/sueyoshi_go が ディレクトリで パーミッション700で ownerがsueyoshi_go で drecom groupに所属していること
describe file("/home/sueyoshi_go") do
it { should be_directory }
it { should be_mode 700 }
it { should be_owned_by "sueyoshi_go" }
it { should be_grouped_into "drecom" }
end
TARGET_HOST=xxx.xxx.xxx.xxx rspec spec/myhome_spec.rb
それっぽく読める!
![Page 17: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/17.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
directory "/home/sueyoshi_go" do
mode "700"
owner "sueyoshi_go"
group "drecom"
not_if "ls /home/sueyoshi_go"
end
itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
itamaeのレシピ (myhome.rb)
![Page 18: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/18.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
itamaeのレシピ (myhome.rb)
ディレクトリが存在していなければ/home/sueyoshi_go を作って パーミッション700で ownerがsueyoshi_goで groupをdrecomにすること
directory "/home/sueyoshi_go" do
mode "700"
owner "sueyoshi_go"
group "drecom"
not_if "ls /home/sueyoshi_go"
end
itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
![Page 19: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/19.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
itamaeのレシピ (myhome.rb)
ディレクトリが存在していなければ/home/sueyoshi_go を作って パーミッション700で ownerがsueyoshi_goで groupをdrecomにすること
directory "/home/sueyoshi_go" do
mode "700"
owner "sueyoshi_go"
group "drecom"
not_if "ls /home/sueyoshi_go"
end
itamae ssh -h xxx.xxx.xxx.xxx -p 10022 recipes/myhome.rb
それっぽく読める!
![Page 20: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/20.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● 目視確認の自動化
○ インフラコードを書く、適用、確認のサイクルを素早く回
せる
● インフラコードがリファクタリングできる
○ バグってもテストコードで検知できる
テスト駆動インフラのメリット
![Page 21: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/21.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● itamae-recipe-jenkins_slave (Jenkins slaveを作るための
レシピ)
○ jenkinsユーザの作成
○ sshの鍵の転送
○ rbenvのインストール
○ jenkinsユーザの鍵を使ってのmasterからslaveへの疎
通確認
○ mysqlやmemcachedなどの起動
● (itamaeやServerspecを書いたことない状態から)開発期
間1週間ちょい
itamaeレシピを社内に公開した
![Page 22: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/22.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
source "https://rubygems.org"
gem "itamae"
gem "itamae-plugin-recipe-rbenv", ">= 0.2.2"
group :test do
gem "serverspec"
end
source "http://gem.xxxxxxx.com" do
gem "itamae-plugin-resource-sudo_remote_file", ">= 0.0.2"
gem "specinfra-plain_sudo", ">= 0.0.2"
end
Gemfile
社内gem
![Page 23: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/23.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● itamae-plugin-resource-sudo_remote_file
○ レシピ実行ユーザが直接コピーできないファイルを
remote_fileするためのプラグイン
○ sudo cp /tmp -> sudo chmod -> scp -> remove
tmp_file な感じ
● specinfra-plain_sudo
○ 弊社環境だと sudo /bin/sh ~ が動かないことがあった
のでspecinfraのsudo実行周辺にモンキーパッチあてて
る
● どっちも弊社環境に起因していることが原因のような気がす
るので社外公開はしない予定
作った社内gem
![Page 24: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/24.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● WEB+DB PRESS vol.80
○ http://gihyo.
jp/magazine/wdpress/archive/2014/vol80
○ テスト駆動インフラ特集
● Serverspec
○ http://www.oreilly.co.jp/books/9784873117096/
○ 体系的にまとまってる
○ 付録でitamaeについてもふれられてる
参考書籍
![Page 25: itamae + Serverspecで テスト駆動インフラやってみた #shibuyarb](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a703031a28abc01f8b4659/html5/thumbnails/25.jpg)
Copyright Drecom Co., Ltd. All Rights Reserved.
● itamaeはそんなにドキュメント充実してない
○ ソースは大した量じゃないのでサクッと読める
○ githubのスライドが一番よくまとまってるw
○ そんなに学習コスト高くない
● Serverspecはドキュメント充実してる
○ ベースはrspecなので普段から使ってるととっつきやす
いはず
○ オライリー本おすすめ
● どっちも日本人が開発してるので日本語でググった時の資
料が充実してる
● コマンドの作業履歴(.bash_historyとか)をコードとして残せ
るのはでかい
所感