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

フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたフロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたShou Takenaka
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Yoshinori Nakanishi
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)CLARA ONLINE, Inc.
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalkBIGLOBE Tech Talk
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Kazuto Ohara
 
kunibiki.rb #5 発表資料
kunibiki.rb #5 発表資料kunibiki.rb #5 発表資料
kunibiki.rb #5 発表資料yoshioka_cb
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalkBIGLOBE Tech Talk
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugTakeshi Komiya
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairNaoya Inada
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)佐久本正太
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5ichikaway
 
Chef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + BerkshelfChef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + BerkshelfMasahiro NAKAYAMA
 

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

Chef cookbooks for OpenStack HA
Chef cookbooks for OpenStack HAChef cookbooks for OpenStack HA
Chef cookbooks for OpenStack HAAdam Spiers
 
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 6Chef
 
Habitat 301: Building Habitats
Habitat 301: Building HabitatsHabitat 301: Building Habitats
Habitat 301: Building HabitatsJamie Winsor
 

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

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

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