Upload
kazuto-ohara
View
151
Download
1
Embed Size (px)
Citation preview
chef 目次
Chef概論
Chefとは
Chef SoloとChef Server
Chef導入でここが変わる!
レシピ実践入門~Apacheの設定レシピを書いてみよう!~
インストール
起動、自動起動
VirtualHostの設定
サーバ情報を表示してみる
Copyright 2014 All About,inc. 2
chef Chefとは
インフラ構築・管理を自動化するツール
インフラの状態をコードで管理(Ruby)
• 構築手順ではない
冪等性を保証する
• 何度実行しても同じ結果になる
Copyright 2014 All About,inc. 3
chef Chef SoloとChef Server
Chef Solo(スタンドアロン)
サーバで直接動く
すぐに始められる、小規模向き
→ローカル開発環境の管理などに利用
Copyright 2014 All About,inc. 4
作業端末
Cookbookをアップロードし実行する
対象サーバ
chef Chef SoloとChef Server
Chef Server(クライアント/サーバ)
Chef Serverでサーバの設定情報が管理される
サーバ情報、設定情報を一元管理できるので大規模な場合便利
→本番環境等の管理に利用
Copyright 2014 All About,inc. 5
作業端末対象サーバ
Chef Server
chef Chef導入でここが変わる!
ローカル開発環境構築の自動化・統一化
設定変更時もレシピをPullして実行するだけ
開発者もインフラ設定を触れる(DevOps)
実現速度向上
インフラ設定が全てレビューされる
品質向上
インフラ設定がバージョン管理される
いつ、誰が、何のために、どの設定を変更したのかがわかる
Copyright 2014 All About,inc. 6
Infrastructure as Code + Github flow
chef Chef導入でここが変わる!
サーバの統一的かつ動的な管理が可能になる
Ohaiによるサーバ情報の自動登録
強力な検索機能• IPが10.255.255.xのサーバ一覧
• アプリ”aa-front”が動いているサーバ一覧 など
サーバ情報と紐付いた設定の自動化が出来る
サーバに対応するアプリのVirtualHostを自動作成
本番とステージングでターミナルの色を変えるなど
Copyright 2014 All About,inc. 7
Chef Serverによる管理自動化
参考:Ohai
http://heartbeats.jp/hbblog/2013/06/use-ohai.html
chef Chefレシピ実践入門
Apacheの設定レシピを書いてみよう!
Apacheのインストール
Apacheの起動
VirtualHostの設定
• ディレクトリ作成
• Apache設定の追加
サーバ情報を表示してみる
Copyright 2014 All About,inc. 8
chef 注意点
設定対象サーバにログインするの禁止!
手動での設定変更は事故につながります
本当はテスト書くといいんだけど、それはまた今度
serverspec
http://serverspec.org/
Copyright 2014 All About,inc. 9
chef ハンズオン環境
Knife Soloを利用
Chef Soloのリモート実行をいい感じに面倒みてくれるツール
配布したVM
user/passはroot/vagrant
knife01(192.168.56.11)
• Knife Soloはインストール済み
• Samba設定してあるので、レシピの編集はお好みのエディタでどうぞ
test-web01(192.168.56.12)
• 基本的なCentOS6.5
Copyright 2014 All About,inc. 10
knife01 test-web01
chef 準備
公開鍵認証設定
/etc/hosts 192.168.56.12 test-web01
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub test-web01
Chefリポジトリ作成
mkdir chef-lesson
cd chef-lesson
knife solo init .
test-web01のChefセットアップ
knife solo prepare test-web01
Cookbookの作成
knife cookbook create httpd -o site-cookbooks
Copyright 2014 All About,inc. 11
chef レシピの記述①
Apacheのインストール
site-cookbooks/httpd/recipes/default.rb
Copyright 2014 All About,inc. 12
package "httpd" doaction :install
end
http://docs.getchef.com/resource_package.html
chef レシピの適用
run_listの指定
nodes/test-web01.json
レシピ適用
knife solo cook test-web01
knife solo cook test-web01 –W (dry-run)
Copyright 2014 All About,inc. 13
{"run_list": [
"recipe[httpd]"],"automatic": {
"ipaddress": "test-web01"}
}
chef レシピの記述②
Apacheの起動、自動起動
site-cookbooks/httpd/recipes/default.rb
Apacheが起動されたか確認
• http://192.168.56.12/
Copyright 2014 All About,inc. 14
service 'httpd' doaction [ :enable, :start]supports :status => true, :restart => true,
:reload => trueend
http://docs.getchef.com/resource_service.html
chef レシピの記述③
VirtualHostの設定
アプリ、ログ共通ディレクトリ作成
• /app, /AccessLog.local
アプリ固有ディレクトリ作成
• /app/test, /AccessLog.local/test
Apache設定の追加
• /etc/httpd/conf.d/test.conf
Copyright 2014 All About,inc. 15
chef レシピの記述③
アプリ、ログ共通ディレクトリ作成
Copyright 2014 All About,inc. 16
directory '/app' doaction :createowner 'root'group 'root'mode '0755'
enddirectory '/AccessLog.local' do
action :createowner 'root'group 'root'mode '0755'
end
http://docs.getchef.com/resource_directory.html
chef レシピの書き方の注意点
クックブックへのハードコーディングを避ける
重複する記述をループで処理する
Copyright 2014 All About,inc. 17
ちょっと待った!
私のコード
長すぎ
chef
node.default['httpd']['directories'].each do |key,dir|directory dir doowner 'root'group 'root'mode 0755action :create
endend
Attribute,ループを活用
site-cookbooks/httpd/attribute/default.rb
site-cookbooks/httpd/recipes/default.rb
レシピの書き方の注意点
Copyright 2014 All About,inc. 18
default['httpd']['directories']['app'] = "/app"default['httpd']['directories']['log'] = "/AccessLog.local"
chef レシピの記述③
アプリ固有ディレクトリ作成
/app/test, /AccessLog.local/test
レシピのattributeに書くと、サーバごとに設定を変えられない
サーバにアプリ情報を登録しておいて、それを元に作成するようにしたい
Copyright 2014 All About,inc. 19
chef レシピの記述③
アプリ固有のディレクトリ
nodes/test-web01.json
Copyright 2014 All About,inc. 20
{"run_list": ["recipe[httpd]"
],"normal": {"apps": [
"test"]
},"automatic": {"ipaddress": "test-web01"
}}
chef レシピの記述③
アプリ固有のディレクトリ
site-cookbooks/httpd/recipes/default.rb
Copyright 2014 All About,inc. 21
node['normal']['apps'].each do |app_name|node.default['httpd']['directories'].each do |key,base_dir|dir = base_dir + "/" + app_namedirectory dir do
owner 'root'group 'root'mode 0755action :create
endend
end
chef レシピの記述③
Apache設定の追加
/etc/httpd/conf.d/配下にvhostごとの設定を置く
テンプレート機能を利用
• 指定のファイルを指定の場所に設置
• ファイルの中にRubyコードを埋め込める(erb)
テンプレート設置ディレクトリの作成
• mkdir -p site-
cookbooks/httpd/templates/default/etc/httpd/conf.d
Copyright 2014 All About,inc. 22
chef レシピの記述③
Apache設定の追加
テンプレート用レシピ
site-cookbooks/httpd/recipes/default.rb
Copyright 2014 All About,inc. 23
node['normal']['apps'].each do |app_name|・・・template "/etc/httpd/conf.d/#{app_name}.conf" dosource 'etc/httpd/conf.d/vhost.conf.erb'notifies :restart, "service[httpd]"variables({
:app_name => app_name})
endend
chef レシピの記述③
Apache設定の追加site-cookbooks/httpd/templates/default/
etc/httpd/conf.d/vhost.conf.erb
Copyright 2014 All About,inc. 24
<Directory <%= node['httpd']['directories']['app'] %>/<%= @app_name %>>AllowOverride AllOptions Includes FollowSymLinksOrder allow,denyAllow from all
</Directory><VirtualHost *:80>DocumentRoot <%= node['httpd']['directories']['app'] %>/<%= @app_name
%>ServerName <%= @app_name %>.comErrorLog <%= node['httpd']['directories']['log'] %>/<%= @app_name
%>/<%= @app_name %>-error_logCustomLog <%= node['httpd']['directories']['log'] %>/<%= @app_name
%>/<%= @app_name %>-access_log combined</VirtualHost>
chef レシピの記述④
サーバ情報を表示してみよう
site-cookbooks/httpd/recipes/default.rb
site-cookbooks/httpd/templates/default/
app/index.html.erb
Copyright 2014 All About,inc. 25
template "/app/#{app_name}/index.html" dosource "app/index.html.erb"
end
<%= node['hostname'] %><br><%= node['ipaddress'] %><br><%= node['macaddress'] %><br><%= node['platform'] %><%= node['platform_version'] %><br><%= node['memory'] %><br><%= node['network'] %>
参考:Ohai
http://heartbeats.jp/hbblog/2013/06/use-ohai.html