Infrastructure as Codeのススメ
自己紹介
@kanjihtmt
最近開発に関われてませんがbaserCMSユーザ会
の人です
最近はサーバよりフロントエンドの方が興味ある
僕のプロビジョニングツールの変遷
自動化も重要だが「Infrastructure as Code」
という考え方・アプローチが気に入った
これでサーバの秘伝のタレが無くなる!
サーバ環境を抽象化できる!
サーバをコードで制御ってカッコイイ!
Chef
やっぱChefでしょう
内部DSL
ユーザも多く、エコシステムが成熟している感
(去年の話ですが)今、すげえ流行ってる!
だが...挫折してしまった。
学習コスト高い
knife, berkshelf? 色々ありすぎでわけわからん!
Windowsにknife soloがインストールできない
開発のスピードが早すぎて覚えてもすぐ変わる
Ansible
長所
たしかにシンプルで使いやすい!
もうこれでいいじゃん!って一時はそう思った
短所(あくまで主観です)
ほとんどシェルスクリプト
playbookを作った俺はわかるが他人には?感
Infrastructure as Codeをフルに実現してない感
気に入らない!軽量なChefが欲しい!
Itamae
あった!これが求めてたもの!
Itamaeとは
Cookpadの荒井良太さん作
Serverspecの宮下剛輔さんも開発に参加
Cookpadではプロダクションで使っているらしい
表現力はそのままLightweightなChef
Chefのわけわからんのが失くなってる
cookbooksもrolesも無いレシピのみ!シンプル!
使い方(1) - レシピを書く# Apacheのインストールとサービスの有効と起動
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
# Apacheの設定ファイルの編集
template "httpd.conf" do
path "/etc/httpd/conf/httpd.conf"
source "./templates/httpd.conf.erb"
mode "0644"
notifies :reload, 'service[httpd]'
end
使い方(2) - sshで実行
リモートサーバにRubyを入れる必要なし!
$ vagrant up
$ itamae ssh -h 192.168.33.1 -p 22 -u vagrant recipe.rb
これで終わり!
レシピをまとめたければRakeに書けばいい
機能が足りなければコードを書けばいい!
Rubyってそういうもんじゃん!
いまはプロビジョニングツールは
別になんでもいい(今ココ!)
理由:大人になったというわけではなく
Severspecを知ったから!
Severspecとは?
インフラのテスト
テスト駆動インフラという新しい考えを
もたらした
インフラをCI出来る
Serverspecのコード
さっきのItameのApacheのレシピをテストしてみる!
require 'spec_helper'
# Apacheのインストールチェック
describe package('httpd'), :if => os[:family] == 'redhat' do
it { should be_installed }
end
# Apacheのサービスの有効と起動をチェック
describe service('httpd'), :if => os[:family] == 'redhat' do
it { should be_enabled }
it { should be_running }
end
# 80ポートでリッスンしているかをチェック
describe port(80) do
it { should be_listening }
end
なんでインフラにテストがいるのか?
プロビジョニングで自動化しても本当に反映されてい
るか分からない
1台だと手動で目視で確認でよいかもしれないが複数
台は辛い!
テストコードはドキュメント!
品質や開発をドライブするためにTDDをすることはよ
くある話。テストコードって動くドキュメントの側面
もある。これは過小評価され見落とされがちなテスト
の効果。
CIで定期実行すればいい。他人が勝手にsshで直接手動
で変更してしまって想定どうりの状態でないことが起
こる可能性もあります。
まとめ
好きなプロビジョニングツールを使おう!
宗教論争をやめよう!
そのかわりサーバのテスト書いてね!
Chefディスっちゃったけど、良いツール!
僕はサーバを何十台も管理していないから軽量なもの
が欲しいだけで、大規模なら僕もChef使うと思います
ご清聴ありがとうございました。m(_ _)m

Infrastructure as codeのススメ