社内Chef勉強会
@uchiunyo
本日の目標
• Chefで何が 勵るのか 卆する
• Chefを何となく動かせるようになる
• Chefの動きがそれとなくわかる
よくある困りごと
• 環境構築しなきゃ・・・
⇒ 構築する時間が無い
⇒ 手順書どおりに構築できない
⇒ そもそも手順書が無い
⇒ オペミスこわい
環境構築を自動化しよう!
• シェル化して自動化がベターですが・・・
• 最近自動化ツールたくさんあります
必要Ruby構成Puppet
必要Ruby構成Chef
勘要PythonデプロイFabric
勘要RubyデプロイCapistrano
クライアント
インストール
言語種別ツール名
Chefの特徴
• 構成 ツールである
・このサーバはこういう構成であると定義する
・冪等性を持つ
• Rubyで記述する
• 用語に特徴がある
• 対象ホストへのインストールが必要
• Communityやgithubで多数のcookbookが公開されている
Chef基本用語
• chef-server
⇒ Server/Client環境のChef。大規模環境向け
• chef-solo
⇒ 単 のChef。小規模ならこれで十分。
• Knife
⇒ chefを操作するためのCLIツール
• Cookbook
⇒ 設定をひとまとめにしたディレクトリ
• Recipe
⇒ 卣の定義本
早速動かしてみよう
https://github.com/uchiunyo/uchistudy/tree/master/201305chefstudy
“Chefをインストールしてみよう” “ してみよう”までやってみましょう。
Chef-soloの
Chef-soloは以下のように します
$ sudo chef-solo –c solo.rb –j chef.json
solo.rb ・・・ chef-soloの設定ファイル
chef.json ・・・ するレシ や匂数を指定する
chef.json
対象ホストで するレシ や変数を設定します。
JSON形式で書きます。
{
“helloworld":{
“name”:”uchi”
},
"run_list":[
“helloworld”
]
}
変数の設定。
node[“helloworld”][“name”]として参照可能
するcookbookを指定する
Cookbook構成
[cookbooks]
└ [helloworld]
├ [recipes] 卣の定義本
├ [resources]
├ [templates] 設定ファイルのテンプレート
├ [files] に必要なファイル
├ [attributes] 変数の定義
├ [definitions]
├ [libraries]
└ [providers]
ChefでMySQLをインストールしよう
https://github.com/uchiunyo/uchistudy/tree/master/201305chefstudy
“Chefでmysqlを入れてみよう“をやりましょう。
Recipeの書き方
• Resourceを使いcookbookの 卣を定義する
・ ResourceとはChefのDSL
・ Resourceに対してAttributeを定義する
・ Rubyのコードが匏用 勵る
・ Recipeに書いた事が から順に される
Recipeの書き方
template "my.cnf" do
path "/etc/my.cnf"
source "my.cnf.erb"
owner "root"
group "root"
mode 0644
notifies :restart, 'service[mysqld]'
end
Resource
Attribute
%w{mysql mysql-server}.each do |pkg|
package pkg do
action :install
end
end
こんな感じに
Rubyで書けます
Recipeの書き方
• Resourceいろいろあります
・ package パッケージをインストール
・ Template テンプレートを配置する
・ File ファイルを操作する
・ Directory ディレクトリを操作する
・ User ユーザー作成する
・ Service サービスを起動したり色々する
標準Resourceは以下のとおり
http://docs.opscode.com/chef/resources.html
Attributes
• Attributesは変数のデフォルト値を設定するファイルを
格納するディレクトリです
・ RecipeのAttributeとは“別モノ”
・ 変数はRecipeやTemplateから匏用できる
Attribute
default[“mysql”][“pkg_name”] = “mysql-server”
package node[“mysql”][“pkg_name”] do
action :install
end
cookbook/mysql/templates/attributes/default.rb
package “mysql-server” do
action :install
end
cookbook/mysql/recipes/default.rb
Templateを使おう
• Chefから配布する設定ファイルはTemplateを使用する
事で動的に生成が可能です
・ TemplateはeRubyで書く
<%= … %>と囲う事で、設定ファイルにRubyのコー
ドが埋め込める
・ 作成したTemplateはTemplate Resourceで配置する
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server = utf8
skip-character-set-client-handshake
innodb_buffer_pool_size=<%= node["mysql"]["buffer_pool_size"] %>
innodb_log_file_size=<%= node["mysql"]["log_file_size"] %>
innodb_file_per_table
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server = utf8
Templateを使おう
my.cnfのTemplate(cookbook/mysql/templates/default/my.cnf.erb)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server = utf8
skip-character-set-client-handshake
innodb_buffer_pool_size=128M
innodb_log_file_size=32M
innodb_file_per_table
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server = utf8
Templateを使おう
生成された/etc/my.cnf
Chef 匏ツール
• Knife-solo
knifeのplugin。ローカルのcookbookをリモート し
たり、Chefをリモートインストールする事が可能
• Vagrant
コマンドラインで簡単に新しいVMを作るツール。
Cookbookのテスト環境を作るのに重宝します。
• serverspec
構築したサーバをテストするツール。Chefでちゃんと構
築できたかテストするのに使えます。
最後に
• もう少し深く勉強したい!という人は「入門Chef
Solo」を買いましょう。Amazonで¥890です。
• 他人のcookbookを るととても勉強になります。
opscodeやgithubで公開されています。
• 大抵のcookbookは既にopscodeなどで公開されていま
すが、少なくともそのcookbookの 動を 卆した で
使いましょう。
ご清聴ありがとうございました

社内Chef勉強会