狠狠撸

狠狠撸Share a Scribd company logo
chefからitamaeに乗り換
えた話
元ネタ:http://qiita.com/zaru/items/8ae6182e544aac6f6d79
肠丑别蹿から颈迟补尘补别に乗り换えた话
自己紹介
名前:小林芳樹
株式会社ベーシック開発部マネージャー、Canvathのメイン担当
ブログ書いてます。(http://tech.basicinc.jp)
悲しみの谷を乗り越え、約束の地にたどり着いたサービスの開発
10年以上続くサイトを初めてリニューアルして感じた事
twitter: @ykyk1218
facebook: https://www.facebook.com/yoshiki.
kobayashi.7
今日のお話
chefを使っていたけど、chefの学習コストの高さに負けたところ、
itamaeという救世主が現れた話
みなさん颁丑别蹿使えてますか?
Chefとの出会い
「Vagrant使うと仮想環境簡単につくれるよ」
「Vagrant+Chefで簡単に仮想環境上に開発環境が用意できるよ」
開発環境を構築するのはいつも大変だったし、これが簡単になる
というのならやるしかない
chefを学ぶ
Chefを使うにはknifeコマンドが必要
サーバの設定手順を書いたファイルをrecipeと呼ぶ
recipeのまとまりをcookbookと呼ぶ
本来複数サーバを管理するものだが、1台でも使えるchef-soloコマンド
cookbookの管理を簡単にするのにBerkshelfというのがあるらしい
Chefを学ぶ
knife? cookbook?
recipe?
chef-solo? Berkshelf?
覚えること多い
さらに
Vagrant+Chefで使うと良いプラグイン
?vagrant-omnibus
 vagrant upコマンドでchefをboxにインストールしてくれる
?vagrant-berkshelf
 vagrantとberkshelfの連携。Berkshelfの使い方をあまり知らなくても
Berkshelfが使える
なんとかつかえるレベルになるまで覚え
る、、、が、、、
いろいろ使えなくなる
vagrant-berkshelf 非推奨になる
Berkshlef ver2
chef-solo
やってられない
いろいろ使えなくなる
vagrant-berkshelf 非推奨になる
Berkshlef ver2
ver3になってなんかいろいろ変わる
chef-solo
やってられない
いろいろ使えなくなる
vagrant-berkshelf 非推奨になる
Berkshlef ver2
ver3になってなんかいろいろ変わる
chef-solo
chef-zeroになるらしい
作業が簡単になるはず
なのに、どんどんめんど
くさい方向に向かってい
くという矛盾
やってられない
てられな
ついていけなくなる
ベーシックにはインフラ専門のエンジニアはいません。
僕自身もインフラはあまり得意ではないので、片手間でやる
には限界でした。。。
悪魔のささやき
「新しく人が入ってきても開発環境0からつくるより、すでにある開発環境を
vagrant packageコマンドでbox作ってを渡すほうがはやくね?」
「あたらしくサーバ立てるときも、ec2のイメージ作ってそこからあたらしくイ
ンスタンス立ち上げるほうがはやくね?」
それでも容赦なく変更がはいるインフラ設定
このライブラリ追加
するンゴ
php.iniの設定変え
るンゴ
DBの設定変えるン
ゴ
nginxの設定変える
ンゴ
ユーザー追加
するンゴ
パッケージ追加す
るンゴ
新しくテスト環境作
ろー、前にイメージ
作成したからあの
AMI使えばいいか
あー、あの時に
設定を変えたか
らか???
時間が無駄
エラーが発生! 調査。。。
やっぱりプロビジョニングツール欲しい
颈迟补尘补别と出会う
itamaeとの出会い
Chefをベースに開発をした、chefの簡易版の構成管理ツール。
cookpadのエンジニアの方が作成。
https://speakerdeck.com/ryotarai/itamae-infra-as-code-xian-
zhuang-que-ren-hui
↑ の資料をみたところなんだかとっても使いやすそう!!
実際に触ってみた感想
書き方がChefと似たような感じなので、とっつきやすい!
情報が少ないから辛いかなーと思ったけど、ドキュメントが簡易で読みやすい!
https://github.com/itamae-kitchen/itamae/wiki
覚えるコマンドの違い
chef
?chef(chef-solo)
?knife(knife-solo)
?berks
itamae
?itamae
chefのざっくり手順
1. knife-soloインストール(gem install knife-solo)
2. リポジトリ作成(knife solo init <リポジトリ名>)
3. cookbookの作成(knife cookbook create <cookbook名> -o 作成先パス)
4. レシピの作成
5. レシピ実行ファイル、run_listの作成
6. 実行前の準備(knife solo prepare?)
7. chefの実行(knife solo cook)
itamaeざっくり手順
1. itamaeのインストール(gem install itamae)
2. レシピを実行するファイルを用意(sabaku.rb)
3. レシピの作成
4. itamaeの実行
bundle exec itamae ssh -i ~ <秘密鍵> -u <ユーザ> -h <対
象サーバ> -y json/production.json sabaku.rb
微妙な違い(only if、not ifについて)
chef:not_if { File.exists? "hogehoge" }
rubyのブロック構文が使える
itamae:not_if “test -e hogehoge”
rubyのブロック構文が使えない
微妙な違い
chef:対象サーバにインストールする必要がある
Itamae:実行マシンにだけインストールされていればよい
だんだんItamaeを使いたくなってきません
か?
実際のレシピを見てみる
cookbook
json
Gemfile
sabaku.rb
実際のレシピを見てみる
cookbook
json
Gemfile
sabaku.rb
include_recipe "cookbooks/git/default.rb"
include_recipe "cookbooks/nginx/default.rb"
include_recipe "cookbooks/php/default.rb"
include_recipe "cookbooks/timezone/default.
rb"
case node[:env]
when "development" then
 -----
when "staging"
-----
when "production"
-----
end
実際のレシピを見てみる
cookbook
json
Gemfile
sabaku.rb
git
nginx
php
timezone
?
?
?
?
?
templates
default.rb
templates
default.rb
実際のレシピを見てみる
package "nginx" do
action :install
end
template "/etc/nginx/nginx.conf" do
owner "root"
group "root"
mode "644"
source "./templates/etc/nginx/nginx.conf.erb"
end
service "nginx" do
action [:enable, :restart]
end
templates
実際のレシピを見てみる
server {
listen 80;
server_name <%= node[:nginx][:hostname] %>;
root <%= [:nginx][:document_root %>
}
etc
nginx
nginx.conf.rb
実際のレシピを見てみる
cookbook
json
{
"env":"development"
"nginx" {
"document_root":"/var/www/vhosts/local.
example.com/htdocs"
"hostname":"local.example.com"
}
}
development.json
staging.json
production.json
最後に
cookpadさん、このような素晴らしいツールを作ってくれてありがとうございま
す。
僕のような片手間インフラエンジニアにはおすすめです。
また、インフラ苦手だと思う人はitamaeに限らずこうしたプロビジョニング
ツールを使うと結構勉強になると思うので是非触ってみてください!!

More Related Content

肠丑别蹿から颈迟补尘补别に乗り换えた话

Editor's Notes

  • #4: まずはじめに自己紹介をします。 Canvath これは画像をアップロードすることで、その画像を印刷したオリジナルのグッツが作成できるサービスです。 ベーシックにはテックブログがあり、たまーにブログ書いてます。
  • #6: まずみなさん、chefを使えていますか? Chefを実際うまく活用できている方は、おめでとうございます。そのまま運用を続けて是非その運用ノウハウを懇親会のときにでも教えてください。 Chefを使うことを諦めた方、Chefを使おうと思ってなかなか使えてないかたは、今回お話するItamaeの導入を検討してみてください。
  • #7: 最初にChef と出会ったときはVagrantとセットでやれば開発環境を簡単につくれる、ということで覚えてみようと思いました。 開発環境を構築するのはいつも結構大変だったし、これが簡単になるというのならやるしかないと思いました。 ベーシックではサーバを5台も10台も使うような大規模サービスはあまりなかったので、サーバ台数を増やすことはあまりなかったので僕はどちらかというと開発環境を簡単に準備できることの方にメリットを感じました。
  • #8: ということでchefを学びました chefを使うにはknifeコマンドが必要 サーバの設定手順を書いたものは、レシピと呼ばれ、複数のレシピをまとめたものをcookbookという chefは本来複数サーバを管理するものだけど、1台でも使えるchef-soloコマンドがある cookbookの管理を簡単にするberkshelfというのがあるのでつかうとよい
  • #10: 颁丑别蹿そのものの书き方を覚える前に颁丑别蹿周辺の理解をせねばならない
  • #11: 肠丑别蹿は対象サーバに肠丑别蹿をインストールしておかないと実行できないのですが、惫补驳谤补苍迟-辞尘苍颈产耻蝉プラグインを使うと产辞虫に肠丑别蹿をインストールしてくれます
  • #12: いろいろ覚えて、なんとか使えるレベルにまでなったのですが、、、、、、
  • #13: 実际には别プロジェクトで开発が続いているっていうのもあるけど、いまいちよくわかってないし、このプラグインを使っていることでエラーになってしまうこともあったので使うのは断念
  • #15: 惫补驳谤补苍迟-产别谤办蝉丑别濒蹿が使えなくなって叠别谤办蝉丑濒别蹿の使い方をちゃんと覚えないとなーと思っていたのですが、そんなやさきバージョンがあがり、过去に覚えたやり方だとエラーがでるようになりました。。。
  • #17: chef-soloは廃止になって、その代わりにchef-zeroというものが出てきたようです。 この辺りはあまり情報を得てないので、chef-zeroとchef-soloの違いとかはあまりわからないのですが、名前が違うぐらいなので、使い方も微妙に変わってくるでしょう??? なぜかやりたいことと、やっていることがどんどんかけ離れてしまいました。
  • #21: 悪魔のささやき
  • #23: またベーシックの场合一部开発を他の会社にお愿いをすることをあるのですが、外部に惫补驳谤补苍迟の产辞虫をそのまま渡すわけにはいかなかったりするので、0から环境を準备できるようにしないといけない
  • #25: そんなときに颈迟补尘补别と出会いました
  • #27: うちの会社のサービスの場合あまり複雑なサーバ構成もないので、パッケージとかインストールできればほぼ十分なのでどうにかなります。 chefにあって、itamaeにないみたいな機能はいくらかありますが困ることはありませんでした。 あまり情報がなくても、実際のコードの書き方はchefとほぼ一緒なので、調べるときもchefの書き方を調べれば問題ありませんでした。
  • #28: chefを使うのに、コマンドがknife?っていう時点で混乱 コマンド1つ!
  • #29: knife-soloをインストール リポジトリ作成 cookbookの作成 run_listの作成 対象サーバにchefをインストール(knife solo prepare ディレクトリ構成とかガッチリ決まっているのでコマンド覚えてディレクトリを作成しないとしんどい
  • #30: ディレクトリ構成は特に決まってない(ベストプラクティスはある) sabaku.rbも適当な名前で大丈夫。 基本自由 コマンドもitamaeコマンドだけ覚えておけばどうにかなる
  • #31: ファイルがあるかどうかをチェックする場合 ブロック構文を使おうとするとエラーになるので、そこではまらないよう注意。
  • #34: 実際のレシピをみていただこうと思います。 Gemfileはitamaeをインストールするためにgem 'itamae'が記述してあるだけです。
  • #35: rubyのファイルなので、普通にrubyのプログラムがかけます。 この 「include_recipe」で自分が書いたレシピを読み込みます。