SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
What is Chef?
                      Infrastructure management framework
                               ※中身は日本語です。




Monday, March 4, 13
Information


                      • OpscodeのChefとは何なのかを中級者
                        以上向けに説明します
                        http://www.opscode.com/chef/


                      • Author Yukihiko Sawanobori
                        HiganWorks LLC(Japan)

Monday, March 4, 13
Index

                      1. Introduction
                      2. Inventory
                      3. Convergence
                      4. Resource Correction
                      5. Configration Management
                         (Automaticaly/Configration first)


Monday, March 4, 13
1.Introduction



Monday, March 4, 13
Q. Chefってサーバの
                      自動セットアップツール
                         ですよね?



Monday, March 4, 13
A. 違います。
            環境のメタデータを管理し、
                 ノードの役割を収束させる
             OPSのフレームワークです。

       ※別にただの自動ビルドツールとして扱っても構いません
Monday, March 4, 13
Q. DevOpsってよく言うし
                      DeveloperとOperaterが
                      仲良く作ったのかな?



Monday, March 4, 13
A. どちらかというと
                      OPSの怒りが集積された
                       ツールだと思います

       ※DevOpsの本質は特定のツールと関係ありません
       ※OhaiとChef::Providersのソースからは特に怨念を感じます
Monday, March 4, 13
Chef認識正誤集1
                      ✕ レシピで華麗にサーバを自動設定

                      ⃝ 泥臭いプラットフォーム判別と、地べ
                      たを いずるようなリソース判定を元に
                      矯正を施します

                      ✕ ChefServerはあまり必要ない

                      ⃝ ChefServerのインベントリこそ全て

Monday, March 4, 13
Chef認識正誤集2

                      ✕ Cookbookにミドルウェアのサーバ別固有情報も書く

                      ⃝ Role/NodeのOverride AttributeやChefServerへのク
                      エリを使い、Cookbookは汎用的に書くべきです

                      ✕ サーバ設定の変更をしたら別で作っているシステムの
                      構成管理台帳を更新する

                      ⃝ サーバへの直接ログインを含め、ChefServer上の構
                      成管理だけで終わらせるのが理想です。


Monday, March 4, 13
2.Inbentory



Monday, March 4, 13
まずはインベントリ収集から

                      • Chef-Client(Chef-solo)が稼働するには
                       実行されたプラットホームの判別が最
                       も重要です。

                      • Chefのマルチプラットフォーム性を支
                       えるためには高度なインベントリの収
                       集力が必要!

Monday, March 4, 13
そこでOhaiです
                      • Ohai (https://github.com/opscode/ohai)
                       • quot: Ohai detects data about your
                         operating system.
                      • 参考資料:Chefの心臓、Ohaiのアトリビュ
                        ート(以下略) http://qiita.com/items/
                        5ce72101f8dee906ccb4
                      • OS/ディストリビューションをはじめ、動作
                        環境を泥臭く判別

Monday, March 4, 13
Ohaiのソース抜粋、
                                     プラットフォーム判別の一部
                #	
  platform	
  [	
  and	
  platform_version	
  ?	
  ]	
  should	
  be	
  lower	
  case	
  to	
  avoid	
  dealing	
  with	
  RedHat/Redhat/redhat	
  matching	
  
                if	
  File.exists?("/etc/oracle-­‐release")
                	
  	
  contents	
  =	
  File.read("/etc/oracle-­‐release").chomp
                	
  	
  platform	
  "oracle"
                	
  	
  platform_version	
  get_redhatish_version(contents)
                elsif	
  File.exists?("/etc/enterprise-­‐release")
                	
  	
  contents	
  =	
  File.read("/etc/enterprise-­‐release").chomp
                	
  	
  platform	
  "oracle"
                	
  	
  platform_version	
  get_redhatish_version(contents)
                elsif	
  File.exists?("/etc/debian_version")
                	
  	
  #	
  Ubuntu	
  and	
  Debian	
  both	
  have	
  /etc/debian_version
                	
  	
  #	
  Ubuntu	
  should	
  always	
  have	
  a	
  working	
  lsb,	
  debian	
  does	
  not	
  by	
  default
                	
  	
  if	
  lsb[:id]	
  =~	
  /Ubuntu/i
                	
  	
  	
  	
  platform	
  "ubuntu"
                	
  	
  	
  	
  platform_version	
  lsb[:release]
                	
  	
  else	
  
                	
  	
  	
  	
  if	
  File.exists?("/usr/bin/raspi-­‐config")
                	
  	
  	
  	
  	
  	
  platform	
  "raspbian"
                	
  	
  	
  	
  else
                	
  	
  	
  	
  	
  	
  platform	
  "debian"
                	
  	
  	
  	
  end
                	
  	
  	
  	
  platform_version	
  File.read("/etc/debian_version").chomp
                	
  	
  end
                elsif	
  File.exists?("/etc/redhat-­‐release")
                	
  	
  contents	
  =	
  File.read("/etc/redhat-­‐release").chomp
                	
  	
  platform	
  get_redhatish_platform(contents)
                                                                                                         まるで
                	
  	
  platform_version	
  get_redhatish_version(contents)
                elsif	
  File.exists?("/etc/system-­‐release")
                	
  	
  contents	
  =	
  File.read("/etc/system-­‐release").chomp
                	
  	
  platform	
  get_redhatish_platform(contents)                                     薄氷を踏むような...
                	
  	
  platform_version	
  get_redhatish_version(contents)
                elsif	
  File.exists?('/etc/gentoo-­‐release')

                                                                                                         地道な虱潰し
                	
  	
  platform	
  "gentoo"



Monday, March 4, 13
AWS(EC2)上かどうかだって
                                                           検出するよ!
                def	
  has_ec2_mac?
                	
  	
  network[:interfaces].values.each	
  do	
  |iface|
                	
  	
  	
  	
  unless	
  iface[:arp].nil?
                	
  	
  	
  	
  	
  	
  if	
  iface[:arp].value?("fe:ff:ff:ff:ff:ff")
                	
  	
  	
  	
  	
  	
  	
  	
  Ohai::Log.debug("has_ec2_mac?	
  ==	
  true")
                	
  	
  	
  	
  	
  	
  	
  	
  return	
  true
                	
  	
  	
  	
  	
  	
  end
                	
  	
  	
  	
  end
                	
  	
  end
                	
  	
  Ohai::Log.debug("has_ec2_mac?	
  ==	
  false")
                	
  	
  false
                end

                def	
  looks_like_ec2?
                	
  	
  #	
  Try	
  non-­‐blocking	
  connect	
  so	
  we	
  don't	
  "block"	
  if	
  
                	
  	
  #	
  the	
  Xen	
  environment	
  is	
  *not*	
  EC2
                	
  	
  hint?('ec2')	
  ||	
  has_ec2_mac?	
  &&	
  can_metadata_connect?
                (EC2_METADATA_ADDR,80)
                end

                if	
  looks_like_ec2?
                	
  	
  Ohai::Log.debug("looks_like_ec2?	
  ==	
  true")

                                                                                                  やっぱり地道に。

Monday, March 4, 13
プラットフォームを判別すると

                      • パッケージ管理システムがわかる

                      • サービスの管理方法がわかる

                      • 環境特有の落とし穴も事前に回避する

                      • Ex) ec2ならipでなくpublic hostname
                        を主な接続先に使うなど


Monday, March 4, 13
Cookbook DSLでの例
                package ‘nginx’ do
                 action :install
                end
                      たとえばコレだけでも

                      •   Redhat系ならyum/rpmを使って

                      •   Debian系ならapt/debを使って

                      •   Solaris系ならpkgin/pkgを使って

                      Chef::Runnerが標準パッケージシステムからnginxをイン
                      ストールした状態にノードを収束させます。


Monday, March 4, 13
Inventory重要
                      • Chef-client/Chef-soloの動作に重要

                      • ChefServerに集約されたInventoryは
                       SearchAPIによる自動環境構築に
                       とってもユースフル




Monday, March 4, 13
3.Convergence



Monday, March 4, 13
✕ Build / Setup
                      ⃝ Convergence




Monday, March 4, 13
Convergenceとは
                      • Chefではサーバ設定の変更を
                       Convergence(収束)と呼んでいます。

                      • (思想として)スクリプトを実行してサーバを
                       セットアップするのではなく、Clientの実
                       行によってサーバの状態をレシピに書かれ
                       ている通り収束させることを表現している
                       ためです。

Monday, March 4, 13
どのような手法か

                      • サーバの状態を取得し、レシピに書かれ
                       た内容と比較。

                      • レシピと違えば「合わせる」、これの繰
                       り返しで設定を”収束”させます。
                       (※Cookbookは冪等に記述する)

                      • 次のResouce Corectionでも説明します。

Monday, March 4, 13
4.Resouce
                      Correcton



Monday, March 4, 13
レシピ適用で重要な
               Resouce/stateという考え方



Monday, March 4, 13
サーバの要素は全て
                           RESOURCEとして定義

                      • 種類と要素=リソース

                      • 例:パッケージ

                       • インストール状態は? / バージョンは?

                      • 例:サービス

                       • 起動中? / 自動起動?

                      • ファイル

                       • パスは? / オーナーは? / 中身は?

Monday, March 4, 13
Curennt Resouceと
                                    New Resouce
                                                [New Resorce]
                      1. Client/Soloは目的のリ       File (
                                                :path => “/etc/hoge”,
                        ソースを定義=New
                                                :owner => “root”,       Converge!
                        Resorce                 :mode => 0644,
                                                :content => “piyo”)
                      2. 現在のリソースを取得
                        =Current Resorce        [Current Resorce]
                                                File (
                      3. Current Resouce の 要素   :path => “/etc/hoge”,
                                                :owner => “root”,
                        を変更                     :mode => 0600,
                                                :content => “hoge”)
                        ※プラットホーム別に
                         変更手段は違う


Monday, March 4, 13
Current Resouce取得例
                         パッケージマネージャ=PackManの場合

                         パッケージの状態を取得。。
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Chef::Log.debug("#{@new_resource}	
  checking	
  pacman	
  for	
  #{@new_resource.package_name}")
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  status	
  =	
  popen4("pacman	
  -­‐Qi	
  #{@new_resource.package_name}")	
  do	
  |pid,	
  stdin,	
  stdout,	
  stderr|
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  stdout.each	
  do	
  |line|
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  line.force_encoding(Encoding::UTF_8)	
  if	
  line.respond_to?(:force_encoding)
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  line
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  when	
  /^Version(s?)*:	
  (.+)$/
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Chef::Log.debug("#{@new_resource}	
  current	
  version	
  is	
  #{$2}")
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  @current_resource.version($2)
           	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  end




                      コマンド叩いてパース...



Monday, March 4, 13
New Resource適用例
                          パッケージをインストール状態に変更
          	
  	
  	
  	
  	
  	
  	
  	
  def	
  install_package(name,	
  version)
          	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  run_command_with_systems_locale(
          	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  :command	
  =>	
  "pacman	
  -­‐-­‐sync	
  -­‐-­‐noconfirm	
  -­‐-­‐noprogressbar#{expand_options(@new_resource.options)}	
  #{name}"
          	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )
          	
  	
  	
  	
  	
  	
  	
  	
  end




             これもまた泥臭い。。
             Cronなんかもお勧めの溝さらい検出Source
                	
  	
  	
  	
  	
  	
  	
  	
  if	
  @cron_exists
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  unless	
  cron_different?
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Chef::Log.debug("Skipping	
  existing	
  cron	
  entry	
  '#{@new_resource.name}'")
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  end
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  read_crontab.each_line	
  do	
  |line|
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  line.chomp
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  when	
  "#	
  Chef	
  Name:	
  #{@new_resource.name}"
                	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  cron_found	
  =	
  true

Monday, March 4, 13
Resouceと冪等性
                      • 地道なResouce Correction

                      • CookBookレシピ=New Resource

                      • Current Resouce を New Resourceと同じ
                        Statusに収束させる。

                      • => Client/Solo は何度実行しても同じ結果、
                        同じ状態になるようにして、常に実行させてお
                        くことが大事。

Monday, March 4, 13
5.Configration
                         Management
                        (Automaticaly/
                      Configration First)


Monday, March 4, 13
構成管理を自動化する




Monday, March 4, 13
構成管理の自動化

                                      ChefServer

                                         Inventory登録/更新(Ohai収集)

                             Chef-       •プラットホーム情報
                      Node   Client
                                         •H/W情報
                                         •N/W情報
                      Node               Attribute Override
                                         Role付与・Runlist付与

Monday, March 4, 13
Env / Roleの割り当て例
                 Serverのインベントリを軸に設定更新

                                              ChefServer


                      Node
                       Node                                   Node

               Recipe[nagios-client]                         Recipe[nagios-server]
               ・Role[Nagis-Server]登録NodeのIP                  ・Role[Nagis-Client]登録NodeのIPを
               からのリクエストを許可                                   取得して監視する
               ・監視対象リソースのプラグインを                              ・監視対象NodeのAttributeから監視
               インストール                                        項目を設定



             Role[Nagios-Client]                           Role[Nagios-Server]

Monday, March 4, 13
環境の構成管理をして
            サーバ構成を自動で合わせる
                 (Configration Management
                           First)


Monday, March 4, 13
新しいNodeにRoleを割り当て
                                 =収束して環境に適応

                                              ChefServer

                                               Roleに追加=Serverにイン
                            New                テキスト
                                              ベントリされる
                      Node
                       Node Node                                     Node
                                               Nagiosのクライアント関

               Recipe[nagios-client]          係設定が収束する              Recipe[nagios-server]
               ・Role[Nagis-Server]登録NodeのIP                         ・Role[Nagis-Client]登録NodeのIPを
               からのリクエストを許可                                          取得して監視する
               ・監視対象リソースのプラグインを               Role[Nagios-Server]はClient ・監視対象NodeのAttributeから監視

               インストール                         のNodeの増減により自動で監 項目を設定
                                               視対象の追加削除を行う

             Role[Nagios-Client]                                 Role[Nagios-Server]

Monday, March 4, 13
構成管理=環境構築


                      • Chef上の要素を変更=構成管理情報の
                       更新をしたら

                      • Clientたちが適当に収束してくれる

                      • 構成管理することが全てにつながる



Monday, March 4, 13
おわりに
                      • Chefをただのワンショットビルドツール
                       として扱うのは間違っちゃ無いが勿体無
                       い。

                      • Soloで更新をかけていくのも悪くはない
                       が勿体無い。
                            これってActiveDirectoryなんじゃないの?と思った人、
                            大体あってますよ。


Monday, March 4, 13

Contenu connexe

Tendances

明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudyTakeshi Komiya
 
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみたFuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみたKatsuhiro Miura
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Kazuto Ohara
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChefMasahiro NAKAYAMA
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalkBIGLOBE Tech Talk
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門辰徳 斎藤
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalkBIGLOBE Tech Talk
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみてSotaro Omura
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみるairtoxin Ishii
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法nasneg
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 

Tendances (20)

明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみたFuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門
 
曖昧 RPM 講座
曖昧 RPM 講座曖昧 RPM 講座
曖昧 RPM 講座
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
Ansible handson
Ansible handsonAnsible handson
Ansible handson
 
Puppet入門
Puppet入門Puppet入門
Puppet入門
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 

Similaire à What is chef

誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築Hiroshi Yamato
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみようMasahiko Hashimoto
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかたMasahito Zembutsu
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohamaTetsuya Chiba
 
カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜Nobuhide Watanabe
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 
FuelPHPにアプリと管理ツールを同居してみる
FuelPHPにアプリと管理ツールを同居してみるFuelPHPにアプリと管理ツールを同居してみる
FuelPHPにアプリと管理ツールを同居してみるMakoto Shimoda
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
Lapp環境をソースからインストールする(debian)
Lapp環境をソースからインストールする(debian)Lapp環境をソースからインストールする(debian)
Lapp環境をソースからインストールする(debian)Kimiyuki Yamauchi
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2Etsuji Nakai
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜Naotoshi Seo
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 

Similaire à What is chef (20)

Yohes kitchen
Yohes kitchenYohes kitchen
Yohes kitchen
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Openstack chef-repo
Openstack chef-repoOpenstack chef-repo
Openstack chef-repo
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
 
カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 
FuelPHPにアプリと管理ツールを同居してみる
FuelPHPにアプリと管理ツールを同居してみるFuelPHPにアプリと管理ツールを同居してみる
FuelPHPにアプリと管理ツールを同居してみる
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
Lapp環境をソースからインストールする(debian)
Lapp環境をソースからインストールする(debian)Lapp環境をソースからインストールする(debian)
Lapp環境をソースからインストールする(debian)
 
Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 

Plus de Yukihiko SAWANOBORI

mocloud カスタムDockerイメージ ハンズオン
mocloud カスタムDockerイメージ ハンズオンmocloud カスタムDockerイメージ ハンズオン
mocloud カスタムDockerイメージ ハンズオンYukihiko SAWANOBORI
 
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecYukihiko SAWANOBORI
 
[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話
[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話
[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話Yukihiko SAWANOBORI
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話Yukihiko SAWANOBORI
 
さくらのインフラコード
さくらのインフラコードさくらのインフラコード
さくらのインフラコードYukihiko SAWANOBORI
 
JAWSUG初心者向けトラック 【Deploy&Ops】
JAWSUG初心者向けトラック 【Deploy&Ops】JAWSUG初心者向けトラック 【Deploy&Ops】
JAWSUG初心者向けトラック 【Deploy&Ops】Yukihiko SAWANOBORI
 
2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as codeYukihiko SAWANOBORI
 
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳するMarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳するYukihiko SAWANOBORI
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-ChefYukihiko SAWANOBORI
 
Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]
Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]
Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]Yukihiko SAWANOBORI
 
Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例
Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例
Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例Yukihiko SAWANOBORI
 
さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]Yukihiko SAWANOBORI
 
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会Yukihiko SAWANOBORI
 
Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)
Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)
Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)Yukihiko SAWANOBORI
 
Building document with the Sphinx public edtion
Building document with the Sphinx public edtionBuilding document with the Sphinx public edtion
Building document with the Sphinx public edtionYukihiko SAWANOBORI
 
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_CodeChef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_CodeYukihiko SAWANOBORI
 
Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較Yukihiko SAWANOBORI
 

Plus de Yukihiko SAWANOBORI (20)

mocloud カスタムDockerイメージ ハンズオン
mocloud カスタムDockerイメージ ハンズオンmocloud カスタムDockerイメージ ハンズオン
mocloud カスタムDockerイメージ ハンズオン
 
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
 
[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話
[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話
[LT] インフラの人がChefやServerspec(ほか)が Rubyだったおかげですこし プログラムをするようになった話
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
 
さくらのインフラコード
さくらのインフラコードさくらのインフラコード
さくらのインフラコード
 
JAWSUG初心者向けトラック 【Deploy&Ops】
JAWSUG初心者向けトラック 【Deploy&Ops】JAWSUG初心者向けトラック 【Deploy&Ops】
JAWSUG初心者向けトラック 【Deploy&Ops】
 
2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code2014年のChefとInfrastructure as code
2014年のChefとInfrastructure as code
 
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳するMarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chef
 
Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]
Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]
Aws OpsWorks [JAWSDAYS 2014 ACEに聞けトラック]
 
Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例
Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例
Infrastructure as Codeと 組織のドキュメンテーション + Immutable Infrastructure事例
 
さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]
 
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
 
Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)
Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)
Chef Casual Talks 出張版京セラドーム公演 (JAWS FESTA Kansai 2013内イベント)
 
はかどるChefの小ネタ集
はかどるChefの小ネタ集はかどるChefの小ネタ集
はかどるChefの小ネタ集
 
Building document with the Sphinx public edtion
Building document with the Sphinx public edtionBuilding document with the Sphinx public edtion
Building document with the Sphinx public edtion
 
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_CodeChef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
Chef_Casual_Talks_Kansai_Vol1_Infrastructure_as_Code
 
Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較
 
aws_opsworks
aws_opsworksaws_opsworks
aws_opsworks
 
Chef meetup vol2_higanwoks
Chef meetup vol2_higanwoksChef meetup vol2_higanwoks
Chef meetup vol2_higanwoks
 

Dernier

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 

Dernier (12)

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 

What is chef

  • 1. What is Chef? Infrastructure management framework ※中身は日本語です。 Monday, March 4, 13
  • 2. Information • OpscodeのChefとは何なのかを中級者 以上向けに説明します http://www.opscode.com/chef/ • Author Yukihiko Sawanobori HiganWorks LLC(Japan) Monday, March 4, 13
  • 3. Index 1. Introduction 2. Inventory 3. Convergence 4. Resource Correction 5. Configration Management (Automaticaly/Configration first) Monday, March 4, 13
  • 5. Q. Chefってサーバの 自動セットアップツール ですよね? Monday, March 4, 13
  • 6. A. 違います。 環境のメタデータを管理し、 ノードの役割を収束させる OPSのフレームワークです。 ※別にただの自動ビルドツールとして扱っても構いません Monday, March 4, 13
  • 7. Q. DevOpsってよく言うし DeveloperとOperaterが 仲良く作ったのかな? Monday, March 4, 13
  • 8. A. どちらかというと OPSの怒りが集積された ツールだと思います ※DevOpsの本質は特定のツールと関係ありません ※OhaiとChef::Providersのソースからは特に怨念を感じます Monday, March 4, 13
  • 9. Chef認識正誤集1 ✕ レシピで華麗にサーバを自動設定 ⃝ 泥臭いプラットフォーム判別と、地べ たを いずるようなリソース判定を元に 矯正を施します ✕ ChefServerはあまり必要ない ⃝ ChefServerのインベントリこそ全て Monday, March 4, 13
  • 10. Chef認識正誤集2 ✕ Cookbookにミドルウェアのサーバ別固有情報も書く ⃝ Role/NodeのOverride AttributeやChefServerへのク エリを使い、Cookbookは汎用的に書くべきです ✕ サーバ設定の変更をしたら別で作っているシステムの 構成管理台帳を更新する ⃝ サーバへの直接ログインを含め、ChefServer上の構 成管理だけで終わらせるのが理想です。 Monday, March 4, 13
  • 12. まずはインベントリ収集から • Chef-Client(Chef-solo)が稼働するには 実行されたプラットホームの判別が最 も重要です。 • Chefのマルチプラットフォーム性を支 えるためには高度なインベントリの収 集力が必要! Monday, March 4, 13
  • 13. そこでOhaiです • Ohai (https://github.com/opscode/ohai) • quot: Ohai detects data about your operating system. • 参考資料:Chefの心臓、Ohaiのアトリビュ ート(以下略) http://qiita.com/items/ 5ce72101f8dee906ccb4 • OS/ディストリビューションをはじめ、動作 環境を泥臭く判別 Monday, March 4, 13
  • 14. Ohaiのソース抜粋、 プラットフォーム判別の一部 #  platform  [  and  platform_version  ?  ]  should  be  lower  case  to  avoid  dealing  with  RedHat/Redhat/redhat  matching   if  File.exists?("/etc/oracle-­‐release")    contents  =  File.read("/etc/oracle-­‐release").chomp    platform  "oracle"    platform_version  get_redhatish_version(contents) elsif  File.exists?("/etc/enterprise-­‐release")    contents  =  File.read("/etc/enterprise-­‐release").chomp    platform  "oracle"    platform_version  get_redhatish_version(contents) elsif  File.exists?("/etc/debian_version")    #  Ubuntu  and  Debian  both  have  /etc/debian_version    #  Ubuntu  should  always  have  a  working  lsb,  debian  does  not  by  default    if  lsb[:id]  =~  /Ubuntu/i        platform  "ubuntu"        platform_version  lsb[:release]    else          if  File.exists?("/usr/bin/raspi-­‐config")            platform  "raspbian"        else            platform  "debian"        end        platform_version  File.read("/etc/debian_version").chomp    end elsif  File.exists?("/etc/redhat-­‐release")    contents  =  File.read("/etc/redhat-­‐release").chomp    platform  get_redhatish_platform(contents) まるで    platform_version  get_redhatish_version(contents) elsif  File.exists?("/etc/system-­‐release")    contents  =  File.read("/etc/system-­‐release").chomp    platform  get_redhatish_platform(contents) 薄氷を踏むような...    platform_version  get_redhatish_version(contents) elsif  File.exists?('/etc/gentoo-­‐release') 地道な虱潰し    platform  "gentoo" Monday, March 4, 13
  • 15. AWS(EC2)上かどうかだって 検出するよ! def  has_ec2_mac?    network[:interfaces].values.each  do  |iface|        unless  iface[:arp].nil?            if  iface[:arp].value?("fe:ff:ff:ff:ff:ff")                Ohai::Log.debug("has_ec2_mac?  ==  true")                return  true            end        end    end    Ohai::Log.debug("has_ec2_mac?  ==  false")    false end def  looks_like_ec2?    #  Try  non-­‐blocking  connect  so  we  don't  "block"  if      #  the  Xen  environment  is  *not*  EC2    hint?('ec2')  ||  has_ec2_mac?  &&  can_metadata_connect? (EC2_METADATA_ADDR,80) end if  looks_like_ec2?    Ohai::Log.debug("looks_like_ec2?  ==  true") やっぱり地道に。 Monday, March 4, 13
  • 16. プラットフォームを判別すると • パッケージ管理システムがわかる • サービスの管理方法がわかる • 環境特有の落とし穴も事前に回避する • Ex) ec2ならipでなくpublic hostname を主な接続先に使うなど Monday, March 4, 13
  • 17. Cookbook DSLでの例 package ‘nginx’ do action :install end たとえばコレだけでも • Redhat系ならyum/rpmを使って • Debian系ならapt/debを使って • Solaris系ならpkgin/pkgを使って Chef::Runnerが標準パッケージシステムからnginxをイン ストールした状態にノードを収束させます。 Monday, March 4, 13
  • 18. Inventory重要 • Chef-client/Chef-soloの動作に重要 • ChefServerに集約されたInventoryは SearchAPIによる自動環境構築に とってもユースフル Monday, March 4, 13
  • 20. ✕ Build / Setup ⃝ Convergence Monday, March 4, 13
  • 21. Convergenceとは • Chefではサーバ設定の変更を Convergence(収束)と呼んでいます。 • (思想として)スクリプトを実行してサーバを セットアップするのではなく、Clientの実 行によってサーバの状態をレシピに書かれ ている通り収束させることを表現している ためです。 Monday, March 4, 13
  • 22. どのような手法か • サーバの状態を取得し、レシピに書かれ た内容と比較。 • レシピと違えば「合わせる」、これの繰 り返しで設定を”収束”させます。 (※Cookbookは冪等に記述する) • 次のResouce Corectionでも説明します。 Monday, March 4, 13
  • 23. 4.Resouce Correcton Monday, March 4, 13
  • 24. レシピ適用で重要な Resouce/stateという考え方 Monday, March 4, 13
  • 25. サーバの要素は全て RESOURCEとして定義 • 種類と要素=リソース • 例:パッケージ • インストール状態は? / バージョンは? • 例:サービス • 起動中? / 自動起動? • ファイル • パスは? / オーナーは? / 中身は? Monday, March 4, 13
  • 26. Curennt Resouceと New Resouce [New Resorce] 1. Client/Soloは目的のリ File ( :path => “/etc/hoge”, ソースを定義=New :owner => “root”, Converge! Resorce :mode => 0644, :content => “piyo”) 2. 現在のリソースを取得 =Current Resorce [Current Resorce] File ( 3. Current Resouce の 要素 :path => “/etc/hoge”, :owner => “root”, を変更 :mode => 0600, :content => “hoge”) ※プラットホーム別に 変更手段は違う Monday, March 4, 13
  • 27. Current Resouce取得例 パッケージマネージャ=PackManの場合 パッケージの状態を取得。。                    Chef::Log.debug("#{@new_resource}  checking  pacman  for  #{@new_resource.package_name}")                    status  =  popen4("pacman  -­‐Qi  #{@new_resource.package_name}")  do  |pid,  stdin,  stdout,  stderr|                        stdout.each  do  |line|                            line.force_encoding(Encoding::UTF_8)  if  line.respond_to?(:force_encoding)                            case  line                            when  /^Version(s?)*:  (.+)$/                                Chef::Log.debug("#{@new_resource}  current  version  is  #{$2}")                                @current_resource.version($2)                            end コマンド叩いてパース... Monday, March 4, 13
  • 28. New Resource適用例 パッケージをインストール状態に変更                def  install_package(name,  version)                    run_command_with_systems_locale(                        :command  =>  "pacman  -­‐-­‐sync  -­‐-­‐noconfirm  -­‐-­‐noprogressbar#{expand_options(@new_resource.options)}  #{name}"                    )                end これもまた泥臭い。。 Cronなんかもお勧めの溝さらい検出Source                if  @cron_exists                    unless  cron_different?                        Chef::Log.debug("Skipping  existing  cron  entry  '#{@new_resource.name}'")                        return                    end                    read_crontab.each_line  do  |line|                        case  line.chomp                        when  "#  Chef  Name:  #{@new_resource.name}"                            cron_found  =  true Monday, March 4, 13
  • 29. Resouceと冪等性 • 地道なResouce Correction • CookBookレシピ=New Resource • Current Resouce を New Resourceと同じ Statusに収束させる。 • => Client/Solo は何度実行しても同じ結果、 同じ状態になるようにして、常に実行させてお くことが大事。 Monday, March 4, 13
  • 30. 5.Configration Management (Automaticaly/ Configration First) Monday, March 4, 13
  • 32. 構成管理の自動化 ChefServer Inventory登録/更新(Ohai収集) Chef- •プラットホーム情報 Node Client •H/W情報 •N/W情報 Node Attribute Override Role付与・Runlist付与 Monday, March 4, 13
  • 33. Env / Roleの割り当て例 Serverのインベントリを軸に設定更新 ChefServer Node Node Node Recipe[nagios-client] Recipe[nagios-server] ・Role[Nagis-Server]登録NodeのIP ・Role[Nagis-Client]登録NodeのIPを からのリクエストを許可 取得して監視する ・監視対象リソースのプラグインを ・監視対象NodeのAttributeから監視 インストール 項目を設定 Role[Nagios-Client] Role[Nagios-Server] Monday, March 4, 13
  • 34. 環境の構成管理をして サーバ構成を自動で合わせる (Configration Management First) Monday, March 4, 13
  • 35. 新しいNodeにRoleを割り当て =収束して環境に適応 ChefServer Roleに追加=Serverにイン New テキスト ベントリされる Node Node Node Node Nagiosのクライアント関 Recipe[nagios-client] 係設定が収束する Recipe[nagios-server] ・Role[Nagis-Server]登録NodeのIP ・Role[Nagis-Client]登録NodeのIPを からのリクエストを許可 取得して監視する ・監視対象リソースのプラグインを Role[Nagios-Server]はClient ・監視対象NodeのAttributeから監視 インストール のNodeの増減により自動で監 項目を設定 視対象の追加削除を行う Role[Nagios-Client] Role[Nagios-Server] Monday, March 4, 13
  • 36. 構成管理=環境構築 • Chef上の要素を変更=構成管理情報の 更新をしたら • Clientたちが適当に収束してくれる • 構成管理することが全てにつながる Monday, March 4, 13
  • 37. おわりに • Chefをただのワンショットビルドツール として扱うのは間違っちゃ無いが勿体無 い。 • Soloで更新をかけていくのも悪くはない が勿体無い。 これってActiveDirectoryなんじゃないの?と思った人、 大体あってますよ。 Monday, March 4, 13