SlideShare a Scribd company logo
1 of 28
Download to read offline
ちょっとずつやる chef
やました
今日話すこと
1.目的
2.chef とは?
3.chef の使い方
4.実例
5.最後に
1. 目的
chef は難しいから使わない
よく分からない
1. 目的
chef をローカル実行するだけならすぐ使えます
⇒ 分からないからまったく使わないのはもったい
ないかも
⇒ ちょっとずつ使って必要になったら勉強するっ
て使い方でも十分便利
2.chef とは?
サーバ設定のコード化を支援するツール
⇒ 構成管理ツール
Infrastructure as Code
(いんふらすとらくちゃーあずこーど)
Infrastructure as Codeで変わるITインフラ管理
2.chef とは?
サーバ設定をコードにすると良いこと
● 手作業が減るのでミスが減る
● 繰り返し作業が楽
● DRY に書ける ⇒これ結構好き
2.chef とは?
サーバの設定って冗長な部分ありませんか?
例 )nginx ⇒ unicorn へのリバースプロキシ
nginx.conf
upstream unicorn {
server 127.0.0.1:8080;
}
unicorn.rb
listen 8080
@unicorn_port
っていう変数で
一元化できるかも
3.chef の使い方
chef の構造
3.chef の使い方
recipe
(ruby スクリプト )
chef-client node
( 設定する server)
recipe を chef-client が実行するとサーバが設定される
⇒ とりあえずこれだけ覚えよう
3.chef の使い方
recipe は cookbook という単位にグルーピング
mysql cookbook の server.rb レシピ ,client.rb
レシピみたいな感じ
アプリ別に作るのが通例ぽい
nginx,mysql...etc
3.chef の使い方
Cookbook はとりあえずこの
ファイルだけ覚えよう
hoge-app => cookbook の名前
|-- recipes
| `-- default.rb => ruby のソース
`-- templates
`-- default
`-- hoge.erb => テンプレート
3.chef の使い方
attributes は chef-client に渡すパラメータのこ
と JSON で書く
よく変わる値とか実行するレシピを指定します
{
"hoge-app": {
"hogeval": "huga" => レシピで使うパラメータも渡せる
},
"run_list": [
"recipe[hoge-app]" => hoge-app を実行
]
}
4. 実例
インストール
curl -L https://www.opscode.com/chef/install.sh | sudo bash
これだけ
http://www.opscode.com/chef/install/
4. 実例
リポジトリ
git clone git@github.com:yaasita/chef-solo-repo.git
使い方
cookbooks/sample/recipes/default.rb を編集して
./chef-solo.sh で実行
→ ちゃんと中身みて実行して下さい><
4. 実例
レシピは Ruby のコード
こう書いても良い?
例)ディレクトリを作る
unless File.directory?(targetdir)
Dir.mkdir(targetdir,0755)
File.chown(65534,3,targetdir)
end
→ ディレクトリだけあってパーミッションが違ってたら?
→ ユーザの ID 違ってるぞ!
→ いろいろ考えるのがめんどくさい
4. 実例
そこで Resources ですよ
例)ディレクトリを作る
directory targetdir do
owner "nobody"
group "sys"
mode "0755"
end
→ Resources は chef が予め定義してくれている DSL
→ 何回実行しても同じ結果になる(←これ大事)
→ 必要最低限の処理をしてくれる owner が違ってたらそこだけ直してくれる
4. 実例
Resources があれば大抵のことはできる!キリッ
例 )sample ユーザを作る
sampleuser="sample"
user sampleuser do
comment "sample user"
home "/home/#{sampleuser}"
supports :manage_home => true
shell "/bin/bash"
action :create
end
→sample ユーザが既に存在すれば何もしない
4. 実例
例 )git パッケージをインストール
package "git" do
action :install
end
→ 既にインストールされてたら何もしない
他にどんなリソースがあるかは↓参照
http://docs.opscode.com/resource.html
4. 実例
なんかパラメータを渡して動的に制御したいんだけど、
そこで attributes ですよ
solo.json
{
"sample": {
"param1": "hoge",
"param2": "huga",
"param_array": ["one","two","three"]
},
"run_list": [
"recipe[sample]"
]
}
自分で定義したパラメータ
実行するレシピ
4. 実例
chef-shell で確認してみる
→ 渡したパラメータはレシピ内で node.sample.param1 みたいに取り出せます
4. 実例
実は chef(ohai) が収集した attributes もあります
これらもレシピの中で使用できます。
ディストリビューションの判定とか自分で書かなくても (  ・∀・ ) イイ !!
4. 実例
(多分)一番良く使う template リソース
cookbooks/sample/recipes/default.rb
template "/tmp/sample_template" do
owner "root"
group "root"
mode "0644"
end
erb を展開できます この場合
cookbooks/sample/templates/default/sample_template.erb
を展開します
4. 実例
こんな感じに使います
service "nginx" do
supports status: true, restart: true, reload: true
end
template "/etc/nginx/nginx.conf" do
owner "root"
group "root"
mode "0644"
notifies :reload, "service[nginx]"
end
→nginx.conf が chef によって更新されたら reload
更新されなかったら reload しない
4. 実例
まとめ
● サーバの設定は chef の Resources を使うと便
利で簡潔に書ける
● パラメータは attributes に入れる。 chef 側で
サーバ情報は殆ど取得済みなのでそれを使って
楽をしよう
5. 最後に
話さなかったこと
興味があったら / 必要そうだったら調べてみてく
ださい
● chef server => node や cookbook を一元管
理するサーバ。
● workstation => chef server を管理するクラ
イアントのこと。 knife コマンドで chef
server を操作する。
5. 最後に
● Data Bags => node/cookbook 間をまたいで
共有できる変数を置く仕組み。
● Attribute Files=> cookbook/recipe でデフォ
ルトの設定を書いたりできる。 node/role の設
定で値を上書きもできる。
● Files => 静的なファイルを置いて recipe の中
でコピーしたりできる。 cookbook_file リソー
スを使う。
● role => node のグルーピング
5. 最後に
● metadata => cookbook 間の依存関係とかバ
ージョン情報とか説明とか書くところ。他の
cookbook を参照する場合はここに書く必要が
ある。
● Berkshelf => Cookbook の管理ツール。 Gem
を管理する Bundler みたいなやつ。
● Vagrant => 簡単に仮想マシンを作れるよう
になる。
5. 最後に
続きは公式サイトで
http://docs.opscode.com/

More Related Content

What's hot

Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Takeshi Komiya
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
Naoya Inada
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
kumachang_LL
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
Sugawara Genki
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
ichikaway
 

What's hot (20)

フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたフロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみた
 
gulp勉強会@IVP
gulp勉強会@IVPgulp勉強会@IVP
gulp勉強会@IVP
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Yohes kitchen
Yohes kitchenYohes kitchen
Yohes kitchen
 
テスト駆動開発入門
テスト駆動開発入門テスト駆動開発入門
テスト駆動開発入門
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門
 
kunibiki.rb #5 発表資料
kunibiki.rb #5 発表資料kunibiki.rb #5 発表資料
kunibiki.rb #5 発表資料
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
 
Chef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + BerkshelfChef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + Berkshelf
 
Haikara
HaikaraHaikara
Haikara
 

Viewers also liked

Viewers also liked (6)

Chef conf-2014
Chef conf-2014Chef conf-2014
Chef conf-2014
 
Chef cookbooks for OpenStack HA
Chef cookbooks for OpenStack HAChef cookbooks for OpenStack HA
Chef cookbooks for OpenStack HA
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
 
Habitat 301: Building Habitats
Habitat 301: Building HabitatsHabitat 301: Building Habitats
Habitat 301: Building Habitats
 
Chef training Day5
Chef training Day5Chef training Day5
Chef training Day5
 
Chef training - Day2
Chef training - Day2Chef training - Day2
Chef training - Day2
 

Similar to Chef

WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
Taku Unno
 
Power shellmemo
Power shellmemoPower shellmemo
Power shellmemo
ytanno
 

Similar to Chef (20)

DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
 
Fabric Essentials
Fabric EssentialsFabric Essentials
Fabric Essentials
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
DrupalでBDDテストを実施してみる①
DrupalでBDDテストを実施してみる①DrupalでBDDテストを実施してみる①
DrupalでBDDテストを実施してみる①
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
 
Rubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェアRubyを使った分散全文検索ミドルウェア
Rubyを使った分散全文検索ミドルウェア
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
Power shellmemo
Power shellmemoPower shellmemo
Power shellmemo
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
 

Chef