26
chef Chef概論と レシピ実践入門 大原 和人(やまと) 1

Chef概論とレシピ実践入門

Embed Size (px)

Citation preview

chef

Chef概論とレシピ実践入門

大原和人(やまと)

1

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

chef 参考

vagrant sahara

レシピ実行前の状態にロールバックできる

インストール

• vagrant plugin install sahara

操作

• vagrant sandbox on

• vagrant sandbox commit

• vagrant sandbox rollback

Copyright 2014 All About,inc. 26