SlideShare a Scribd company logo
1 of 30
環境構築自動化ツール
 Chef を試してみた
      Aizu.LT kanagawaWithIndex:1
           2013/3/30 at uPhyca inc.

                      Taku Unno
                DWANGO Co,. Ltd
           boscoworks@gmail.com
Profile
 海野 拓 (Taku Unno)
 2004-2008 会津大学 (画像処理学講座)
 2008-2012 Yahoo!JAPAN
   Yahoo!バラエティ、Yahoo!ニュース、Yahoo!ロコ
 2012/4-Now Dwango
   RCP、許諾楽曲開発、NicoSound、マーケティング
 Mail: boscoworks@gmail.com
 Facebook: http://on.fb.me/yDZ2XO
【PR】あわせて読みたい
 http://www.slideshare.net/boscoworks/
   転職LT
   ニコニコ動画の著作権管理の仕組み
   PHPカンファレンス2012 レポート
【PR】ニコニコ超会議2
 http://www.chokaigi.jp/
 4/27-28
 幕張メッセ
デプロイの話
開発マイルストーン
 PDCA サイクル
    Plan, Do, Check, Act
    企画・設計
    開発・テスト
    リリース
    性能評価・マーケティング
    改善



 今日はリリースの話です
How to deploy?
 独自シェルスクリプト
 SCP
 svn switch
 rake
 kickstart
 Puppet
 yinst
Chef とは
 サーバ構成管理ツール
 環境構築を自動化出来る
 Ruby で書ける
 インフラ構築の作業手順書をスクリプトに出来る
時代はDevOps
 インフラエンジニアの作業負荷軽減
  デプロイ手順の簡略化
 環境再現・構築の容易化
 構築手順のバージョン管理
Chef 導入のメリット
 デプロイが簡単
 スクリプトで書いた通りにデプロイできる
 バージョン管理出来る
 適用する recipe をサーバによって自由に組み替えられ
 る
Chef のデメリット
 既存システムに組み込むのが大変
 学習コストは低くない
 環境によってディストリビューションが違うと泥沼
 組み込みコマンドは使えない
 そもそもChef導入までがいばらの道
  (Chef-Serverを使う場合)
 Recipe のメンテをサボりがち
Chef の構成
構成要素
 Cookbook (ソフトウェアを構築するための手順ひとま
 とめ)
  Recipe (実行内容を記述するスクリプト)
    Attribute (変数の定義)
    Template (テンプレートファイル)
    Resource (処理の抽象化)
  Role (Recipeを組み合わせて役割として定義)
 Node (管理対象のクライアントマシン)
単体でも実行可能 (Chef-Solo)
 中小規模アプリケーションであればこれで十分
 Chef そのものの導入が手軽
 ざっくり以下2ファイルを準備:
  chef.json
    run_list (recipe一覧) を記述
  solo.rb
    Cookbook のパス、ログレベルなどを指定

  % sudo chef-solo –c solo.rb –j chef.json
chef.json
{

    "run_list": [

        "recipe[php::php]",

        "recipe[php::apache]",

        "recipe[php::phpunit]”

    ]

}
solo.rb
file_cache_path "/tmp/chef-solo"

cookbook_path "/home/boscoworks/chef/cookbooks"

role_path "/var/chef/roles"

log_level :debug
Recipe でパッケージをいれる
package "php-pear" do

 action :install

 not_if "which pear"

end
OSによる条件分岐
package "php5-cli" do
 case node[:platform]
  when "ubuntu"
   package_name "php5-cli"
  when "centos"
   package_name "php53"
 end
 action :install
 not_if "which php"
end
PEARパッケージをいれる
php_pear "PHPUnit" do

 action :install

 channel "phpunit"

 options "--alldeps --force"

 version "3.6.11"

 not_if "which phpunit"

end
コマンドを実行する
execute "package update" do
 case node[:platform]
  when "ubuntu"
   command "apt-get update"
  when "centos"
   command "yum -y update"
 end
end
ディレクトリを作成する
directory "/tmp/users" do
 owner "root"
 mode "0777"
 action :create
 not_if do
  File.exists?("/tmp/users")
 end
end
Template を配置する
template "/usr/local/apache2/conf/extra/httpd-vhosts.conf" do

 owner "root"

 group "root"

 mode "0777"

 not_if do

  File.exists?("/usr/local/apache2/conf/extra/httpd-vhost.conf")

 end

end
Attribute を Template で使う
 Template


<VirtualHost *:80>

 ServerAdmin webmaster@localhost

 ServerName <%= node[:server_name] %>

 DocumentRoot /home/boscoworks/public

…
Attribute を Template で使う
 Attribute


default['server_name'] = ”localhost"
Attribute を Recipe で使う
 Recipe


execute "tar" do

 command "tar jxvf /tmp/httpd-#{node.httpd_version}.tar.bz2 -C /tmp/"

 only_if do

    File.exists?("/tmp/httpd-#{node.httpd_version}.tar.bz2")

 end

…
Attribute を Recipe で使う
 Attribute


default['httpd_version'] = "2.2.19"
まとめ
 構築の自動化が凄く楽
 「作る/壊す」開発環境VMが手軽に準備出来る
 Chefは何でもやってくれる万能ツールではない
 イニシャルコスト・メンテナンスコストをきちんと割
 きたい
参考文献
   Chef wiki
     http://wiki.opscode.com/display/chef/Home

   Opscode Community
     http://community.opscode.com/cookbooks

   日本Chefユーザー会
     https://www.facebook.com/japan.chef.users.group

   Chef でサーバ管理を楽チンにしよう!
     http://jp.rubyist.net/magazine/?0035-ChefInDECOLOG

   Chef を試してみた
     http://higelog.brassworks.jp/?p=643

   ChefでCookbookを作るときのちょっとしたコツ 9選
     http://heartbeats.jp/hbblog/2013/01/chef-cookbook-tips.html

   chef-soloで環境設定
     http://tdoc.info/blog/2012/05/08/chef_solo.html
ご清聴ありがとうございまし
      た

                        Taku Unno
                DWANGO Co,. Ltd
         boscoworks@gmail.com
          http://on.fb.me/yDZ2XO

More Related Content

What's hot

20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo
ichikaway
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
Yuuki Namikawa
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
Takeshi Komiya
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
kumachang_LL
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
Naoya Inada
 

What's hot (20)

NDS#31
NDS#31NDS#31
NDS#31
 
環境構築から始めるDjangoチュートリアル
環境構築から始めるDjangoチュートリアル環境構築から始めるDjangoチュートリアル
環境構築から始めるDjangoチュートリアル
 
Djangoのチュートリアル
DjangoのチュートリアルDjangoのチュートリアル
Djangoのチュートリアル
 
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
Apache Module
Apache ModuleApache Module
Apache Module
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
Chefのはじめの一歩
Chefのはじめの一歩Chefのはじめの一歩
Chefのはじめの一歩
 
20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
20130606 alfresco study16audit
20130606 alfresco study16audit20130606 alfresco study16audit
20130606 alfresco study16audit
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
 

Similar to Aizu.LT::Tokyo #4

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
Naotaka Jay HOTTA
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
ichikaway
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
Mori Shingo
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 

Similar to Aizu.LT::Tokyo #4 (20)

Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
 
コンテナーによるIT基盤変革 - IT infrastructure transformation -
コンテナーによるIT基盤変革 - IT infrastructure transformation -コンテナーによるIT基盤変革 - IT infrastructure transformation -
コンテナーによるIT基盤変革 - IT infrastructure transformation -
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 

More from Taku Unno (8)

株式会社リブセンス会社説明資料(転職エージェント企業様向け)
株式会社リブセンス会社説明資料(転職エージェント企業様向け)株式会社リブセンス会社説明資料(転職エージェント企業様向け)
株式会社リブセンス会社説明資料(転職エージェント企業様向け)
 
ソフトウェアのように〇〇を作る
ソフトウェアのように〇〇を作るソフトウェアのように〇〇を作る
ソフトウェアのように〇〇を作る
 
株式会社リブセンス会社説明資料(OthloHack 2019)
株式会社リブセンス会社説明資料(OthloHack 2019)株式会社リブセンス会社説明資料(OthloHack 2019)
株式会社リブセンス会社説明資料(OthloHack 2019)
 
株式会社リブセンス会社説明資料(Kiitok Career Fair 2019)
株式会社リブセンス会社説明資料(Kiitok Career Fair 2019)株式会社リブセンス会社説明資料(Kiitok Career Fair 2019)
株式会社リブセンス会社説明資料(Kiitok Career Fair 2019)
 
ビジネス職新卒向け Web基礎研修
ビジネス職新卒向け Web基礎研修ビジネス職新卒向け Web基礎研修
ビジネス職新卒向け Web基礎研修
 
Aizu.LT::Tokyo #2
Aizu.LT::Tokyo #2Aizu.LT::Tokyo #2
Aizu.LT::Tokyo #2
 
Aizu.LT::Tokyo #1
Aizu.LT::Tokyo #1Aizu.LT::Tokyo #1
Aizu.LT::Tokyo #1
 
Aizu.LT #16
Aizu.LT #16Aizu.LT #16
Aizu.LT #16
 

Aizu.LT::Tokyo #4