SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
今日から使い始めるChef

       2013-03-29
    Xtone Ltd. ピザ会
   (without pizza><)
     Aki / @nekoruri
いくつかの案件がChef管理に移行しました

必ず覚えて欲しいこと
Chef
• サーバの構成管理ツール
 – サーバの「完成状態」を書く      ここ全部
 – 「現状」との違いを判断する      Chefが
 – その差分を埋める          やってくれる
  •   パッケージのインストール
  •   設定ファイルの設置
  •   サービスの起動
  •   DBのユーザ作成
  •   ファイアウォール設定
  •   etc.
禁止事項
• サーバ上でrootで設定ファイル変更
禁止事項
• サーバ上でrootで設定ファイル変更




    Chefで設定戻されて突然の障害
使ってみる
1. Chefのレポジトリを取ってくる
2. rootで入れるサーバを一台作る
3. 対象サーバにchef-soloを入れる
  – knife solo prepare root@192.0.2.100
4. ノード設定を適当に書く
  – vim nodes/192.0.2.100.json
    {"run_list": ["role[base]"]}

5. chef起動
  – knife solo cook root@192.0.2.100
使ってみる
1. Chefのレポジトリを取ってくる
2. rootで入れるサーバを一台作る
3. 対象サーバにchef-soloを入れる
  – knife solo prepare root@192.0.2.100
4. ノード設定を適当に書く
  – vim nodes/192.0.2.100.json
    {"run_list": ["role[base]"]}
                                       以降はここだけ
5. chef起動
  – knife solo cook root@192.0.2.100
ざっくりChefのしくみのおさらい

ざっくりCHEFの紹介
Chef用語
• Resource
   – 設定の最小単位
   – ファイルやパッケージ単位の設定
• Recipe
   – 複数のResourceで構成されるひとまとまり
• Cookbook
   – Recipeをグループにまとめたもの
   – 一つのRecipeしか含まない場合もある

• レポジトリ(キッチン)
   – Chefの動作に必要なファイル群
   – 複数のCookbookや、ロール・ノードの設定を含む
Chef用語
• ノード
  – Chefで管理されるサーバ
• Role
  – ノードの役割を定義
  – 使うRecipeとか変数とかをここで設定する(抽象化)
• chef-solo
  – サーバ無しでChefを利用するコマンド
  – chef-soloを動かしたノード自身が操作対象となる
• knife-solo
  – 対象ノードにレポジトリを転送してchef-soloを動かす
Resource
• 設定の最小単位
              template '/etc/apache2/sites-available/www.example.jp' do
 – ファイル         source 'www.example.jp.erb'
                mode '0644'                             ファイルを更新したら
                action :create                           apache2サービスを
                notifies :restart, "service[apache2]"         再起動
              end


 – パッケージ      %w{zsh zip sysstat libcache-cache-perl}.each do |pkg|
               package pkg do
                action :install                  完全にRuby
               end
              end

              firewall_rule "zabbix" do
 – ファイアウォール      port 10050
                 source "192.0.2.5"
                 action :allow
                 notifies :enable, "firewall[ufw]"
              end
Recipe
• 複数のResourceで構成されるひとまとまり
  munin_servers = [' 192.0.2.6/32', ' 192.0.2.140 /32']
  package "munin-node"

  service_name = node['munin']['service_name']                    Rubyの内部DSLなので
                                                                  変数とかも利用し放題
  service service_name do
   supports :restart => true
   action :enable
  end                                                             サーバ毎の設定を利用
  template "#{node['munin']['basedir']}/munin-node.conf" do
   source "munin-node.conf.erb"
   mode 0644
   variables :munin_servers => munin_servers                       変数をerbに渡す
   notifies :restart, "service[#{service_name}]"
  end
                                           サーバの情報を利用して分岐
  case node['platform']
  when "arch", "smartos"
   execute "munin-node-configure --shell | sh" do
    not_if { Dir.entries(node['munin']['plugins']).length > 2 }
    notifies :restart, "service[#{service_name}]"
   end
  end
Template
log_level 4
log_file /var/log/munin/munin-node.log
port 4949
pid_file /var/run/munin/munin-node.pid
background 1
setseid 1


# Which port to bind to;
host *                                               サーバ毎の設定を利用
user root
group <%= node['munin']['root']['group'] %>
setsid yes

<% end %>

# A list of addresses that are allowed to connect. This must be a
# regular expression, due to brain damage in Net::Server, which
# doesn't understand CIDR-style network notation. You may repeat
# the allow line as many times as you'd like
                                                       引き渡された変数を利用
allow ^127¥.0¥.0¥.1$
<% @munin_servers.sort.each do |server| -%>
cidr_allow <%= server %>
<% end -%>
Cookbookの構成
cookbooks/munin
├── README.md
├── attributes       変数のデフォルト値
├── definitions
├── files
                    erbしない配布ファイル
│ └── default
├── libraries
├── metadata.rb
├── providers
                      デフォルトのRecipe
├── recipes          「munin」で利用可能
│ └── default.rb
│ └── server.rb
                    デフォルト以外のRecipe
├── resources      「munin::server」で利用可能
└── templates
  └── default        配布ファイルの置き場
                       erb利用可能
新しいChefレポジトリを作って、
既存のCookbookを組み合わせて
自分用のRecipeを書いて
実際のノードに適用するまで

一からやってみる
レポジトリを作る
• knife-solo gemを入れる
    % gem install knife-solo


• knife soloでレポジトリ作成
    % knife solo init demo
    % cd demo
    % git init
    % git add .
    % git commit -m 'new chef repo'
opscode-cookbooks
• Chef開発元が公開しているCookbook集
 – オープンソースとして開発
 – Github上で公開
   https://github.com/opscode-cookbooks/
 – Ubuntuなら組み合わせるだけでそのまま使える
   ※ CentOSだとイマイチという意見多し(未確認)
 – knifeコマンドで取ってこれる
opscode-cookbooksのインポート
• knife cookbookでCookbookを取ってくる
    % knife cookbook site install apt -o cookbooks
    % knife cookbook site install users -o cookbooks
    % knife cookbook site install sudo -o cookbooks
                                                       依存関係を見て引っ張って
    % knife cookbook site install mysql -o cookbooks    くるツールがあるが、
                                                          今回は未使用



• knife-github-cookbooksというgemもある
  – github上の任意のCookbookをインポートできる
新しくCookbook/Recipeを作る
• knife cookbook createでCookbookを作成
  – site-cookbooks以下に置くのが慣習
    % knife cookbook create base -o site-cookbooks


• Recipeを書いていく
    % vim site-cookbooks/base/recipes/default.rb

           include_recipe 'apt'

           # ユーザ設定
           include_recipe 'users::sysadmins'
           node.override['authorization']['sudo']['passwordless']   = true
           include_recipe 'sudo'
Roleに経由してRecipeを利用する
• ロールに対して利用するレシピを設定
  % vim roles/base.rb

         name "base"
         description "base packages"
         run_list(
           'recipe[base]',
           'recipe[mysql::server]'
         )
         default_attributes({
           'mysql' => {
             'server_root_password' => 'rootpw',
             'server_repl_password' => 'replpw',
             'server_debian_password' => 'maintpw',
             'tunable' => {
               'log_bin' => 'mysqld'
             }
           }
         })
Roleに経由してRecipeを利用する
• ノードに対してロールを紐付ける
  % nodes/192.0.2.100.json

         {
             "run_list": ["role[base]"],
             "mysql": {                              ノード別で異なる設定は
               "tunable": {                            ここで定義できる
                 "server_id": "1",
                 "innodb_buffer_pool_size": "2048M",
                 "innodb_log_file_size": "128M"
               }
             }
         }
data_bags
• ユーザ情報などを置いておけるデータ置き場
 – chef-solo環境だと、data_bagsディレクトリ内
   % data_bags/users/hoge.json

          {
              "id": "hoge",
              "uid": "10001",
              "comment": "FOO Bar",
              "ssh_keys": [
                 "ssh-rsa AAAAなんちゃら= hoge@example.jp"
              ],
              "groups": [ "sysadmin" ],
              "shell": "/usr/bin/zsh"
          }
chef-solo実行
1. 対象サーバにchef-soloを入れる
  – knife solo prepare root@192.0.2.100
2. chef起動
  – knife solo cook root@192.0.2.100
ありがとうopscode-cookbooksありがとう

おすすめCOOKBOOK
apt
• aptレポジトリの更新
 – https://github.com/opscode-cookbooks/apt
 – 「include_recipe 'apt'」でapt-getしてくれる
 – 使わないと古いパッケージを取りに行き失敗
users::sysadminsとsudo
• ユーザ管理(users::sysadmins)
  – https://github.com/opscode-cookbooks/users
  – data_bagsにsysadminグループのユーザ設定を入
    れておくと勝手に作ってくれる
  – ユーザ追加の度にRecipeを変更しなくてよい
• sudoers管理(sudo)
  – 上記sysadminグループはデフォルトで入ってる
firewall
• ファイアウォールのルール設定
 – https://github.com/opscode-cookbooks/firewall
       firewall "ufw" do                firewall Cookbookで定義された
         action :enable                           独自リソース
       end
       firewall_rule "ssh" do
         port 22
         action :allow
         notifies :enable, "firewall[ufw]"
       end


 – Ubuntu標準ではpingが拒否されているので、
   変更したbefore.ruleも配る
apache2 / php
• 各ミドルウェアを入れてくれる
 – https://github.com/opscode-cookbooks/apache2
       node.default['apache']['listen_ports'] = [80, 443]
       node.default['apache']['serversignature'] = 'Off'
       node.default['apache']['traceenable'] = 'Off'
       include_recipe 'apache2::mod_proxy_http'
       include_recipe 'apache2::mod_php5'
       include_recipe 'apache2::mod_rewrite'
       include_recipe 'apache2::mod_ssl'
       include_recipe 'apache2'

       include_recipe 'php::package'
       include_recipe 'php::module_apc'
       include_recipe 'php::module_mysql'
       include_recipe 'php::module_gd'
       node.default['php']['directives'] = { 'date.timezone' => 'Asia/Tokyo' }
mysql / database
• データベースのユーザを作成する
 – https://github.com/opscode-cookbooks/database
       include_recipe 'database::mysql'
       mysql_connection_info = {
         :host => "localhost",
         :username => 'root',
         :password => node['mysql']['server_root_password']
       }

       mysql_database 'myapp_production' do
        connection mysql_connection_info
        action :create
       end

       mysql_database_user 'myapp_production' do
        connection mysql_connection_info
        password 'passwordpassword'
        database_name 'myapp_production'
        host 'localhost'
        action :create
       end
関連情報
• 伊藤直也さんの電子書籍がベスト
  – 入門Chef Solo - Infrastructure as Code
    http://www.amazon.co.jp/dp/B00BSPH158/
    http://tatsu-zine.com/books/chef-solo
• opscode-cookbooksを読む
  – 宝の山
  – https://github.com/opscode-cookbooks
ぐぬぬ

悩んでいること
Unicorn環境
• unicorn::default
  – Unicorn gemいれる→普通Bundlerだし
  – 設定ファイル→アプリと一緒にデプロイするし
• application_ruby::unicorn
  – 似てるようで似てるだけのCapistranoデプロイと
    いまいち相性が悪い!
  – runitでUnicornのプロセス自動再起動!すごい!

  – graceful restartさせると死ぬ!すごい!!1
OpsWorks
• AWS + Chef
  – http://aws.amazon.com/jp/opsworks/
  – AWS提供のChef Cookbookを組み合わせる
  – まだ遊んでない
その他のアプローチ
• RightScale / Scalr
  – もう一つ上のレイヤーでの構成管理したい派
  – Xtoneでも某ゲーム案件で利用


• PaaS
  – そもそもミドルウェアなんて面倒みたくない派
  – Heroku、EngineYard、 AWS Elastic Beanstalk
    ニフクラC4SA、IIJ Mogok

Contenu connexe

Tendances

Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング勲 國府田
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)CLARA ONLINE, Inc.
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstartHideki Saito
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみるairtoxin Ishii
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 
ノンプログラマのためのウェブサーバ入門
ノンプログラマのためのウェブサーバ入門	ノンプログラマのためのウェブサーバ入門
ノンプログラマのためのウェブサーバ入門 Atsu Yamaga
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門辰徳 斎藤
 
Okinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleOkinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleHideki Saito
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)hiboma
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 

Tendances (20)

Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
Ansible handson
Ansible handsonAnsible handson
Ansible handson
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
ノンプログラマのためのウェブサーバ入門
ノンプログラマのためのウェブサーバ入門	ノンプログラマのためのウェブサーバ入門
ノンプログラマのためのウェブサーバ入門
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
Okinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - AnsibleOkinawa Open Days 2015 Handson - Ansible
Okinawa Open Days 2015 Handson - Ansible
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 

En vedette

qpstudy 2014.04 ミドルウェア設計の勘所
qpstudy 2014.04 ミドルウェア設計の勘所qpstudy 2014.04 ミドルウェア設計の勘所
qpstudy 2014.04 ミドルウェア設計の勘所Masahiro NAKAYAMA
 
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析Masahiro NAKAYAMA
 
20140704 cassandra introduction
20140704 cassandra introduction20140704 cassandra introduction
20140704 cassandra introductionMasahiro NAKAYAMA
 
ChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_ja
ChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_jaChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_ja
ChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_jaMasahiro NAKAYAMA
 
Chef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + BerkshelfChef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + BerkshelfMasahiro NAKAYAMA
 
セキュリティ・キャンプ参加してみた #ssmjp #seccamp
セキュリティ・キャンプ参加してみた #ssmjp #seccamp セキュリティ・キャンプ参加してみた #ssmjp #seccamp
セキュリティ・キャンプ参加してみた #ssmjp #seccamp Masahiro NAKAYAMA
 
今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre
今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre
今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapreMasahiro NAKAYAMA
 
クリスマス直前! HTML5 で作る♥ はじめての iOS & Android アプリ開発
クリスマス直前!HTML5 で作る♥はじめての iOS & Android アプリ開発クリスマス直前!HTML5 で作る♥はじめての iOS & Android アプリ開発
クリスマス直前! HTML5 で作る♥ はじめての iOS & Android アプリ開発Osamu Monoe
 
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccampクラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccampMasahiro NAKAYAMA
 
OAuth 2.0の概要とセキュリティ
OAuth 2.0の概要とセキュリティOAuth 2.0の概要とセキュリティ
OAuth 2.0の概要とセキュリティHiroshi Hayakawa
 
エンジニアが知っておくべきSSL/TLSの知識(仮)
エンジニアが知っておくべきSSL/TLSの知識(仮)エンジニアが知っておくべきSSL/TLSの知識(仮)
エンジニアが知っておくべきSSL/TLSの知識(仮)Masahiro NAKAYAMA
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介Akihiro Kuwano
 
クラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccampクラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccampMasahiro NAKAYAMA
 
15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDockerMasahiro NAKAYAMA
 

En vedette (18)

qpstudy 2014.04 ミドルウェア設計の勘所
qpstudy 2014.04 ミドルウェア設計の勘所qpstudy 2014.04 ミドルウェア設計の勘所
qpstudy 2014.04 ミドルウェア設計の勘所
 
5分で分かるcron
5分で分かるcron5分で分かるcron
5分で分かるcron
 
anterie
anterieanterie
anterie
 
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析最近つくったrecent_zombies -  Perlで始めるTwitterタイムライン分析
最近つくったrecent_zombies - Perlで始めるTwitterタイムライン分析
 
20140704 cassandra introduction
20140704 cassandra introduction20140704 cassandra introduction
20140704 cassandra introduction
 
ChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_ja
ChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_jaChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_ja
ChefとCapistranoの境界線 (Chef Casual Talks Vol.1) #eytokyo #opschef_ja
 
Chef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + BerkshelfChef Howto with Vagrant + Berkshelf
Chef Howto with Vagrant + Berkshelf
 
セキュリティ・キャンプ参加してみた #ssmjp #seccamp
セキュリティ・キャンプ参加してみた #ssmjp #seccamp セキュリティ・キャンプ参加してみた #ssmjp #seccamp
セキュリティ・キャンプ参加してみた #ssmjp #seccamp
 
今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre
今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre
今期の好きなアニメ「アイドルマスターシンデレラガールズ」 #infrapre
 
クリスマス直前! HTML5 で作る♥ はじめての iOS & Android アプリ開発
クリスマス直前!HTML5 で作る♥はじめての iOS & Android アプリ開発クリスマス直前!HTML5 で作る♥はじめての iOS & Android アプリ開発
クリスマス直前! HTML5 で作る♥ はじめての iOS & Android アプリ開発
 
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccampクラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
 
OAuth 2.0の概要とセキュリティ
OAuth 2.0の概要とセキュリティOAuth 2.0の概要とセキュリティ
OAuth 2.0の概要とセキュリティ
 
エンジニアが知っておくべきSSL/TLSの知識(仮)
エンジニアが知っておくべきSSL/TLSの知識(仮)エンジニアが知っておくべきSSL/TLSの知識(仮)
エンジニアが知っておくべきSSL/TLSの知識(仮)
 
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
qpstudy 〜初心者にやさしいインフラ勉強会〜 の紹介
 
TwitterのOAuth脆弱性
TwitterのOAuth脆弱性TwitterのOAuth脆弱性
TwitterのOAuth脆弱性
 
クラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccampクラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccamp
 
15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker15分で分か(った気になれ)るDocker
15分で分か(った気になれ)るDocker
 
Api gatewayの話
Api gatewayの話Api gatewayの話
Api gatewayの話
 

Similaire à 今日から使い始めるChef

シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairNaoya Inada
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介Midori Oge
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalkBIGLOBE Tech Talk
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -Masaya Konishi
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!Midori Oge
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Yoshinori Nakanishi
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門Mahito Ogura
 

Similaire à 今日から使い始めるChef (20)

シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
12 cyberagent
12 cyberagent12 cyberagent
12 cyberagent
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
 
入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk入門 Chef Server #biglobetechtalk
入門 Chef Server #biglobetechtalk
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
Capistrano
CapistranoCapistrano
Capistrano
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
Yohes kitchen
Yohes kitchenYohes kitchen
Yohes kitchen
 
Chef
ChefChef
Chef
 

Plus de Masahiro NAKAYAMA

ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampイントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampMasahiro NAKAYAMA
 
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjpめもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjpMasahiro NAKAYAMA
 
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp Masahiro NAKAYAMA
 
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介Masahiro NAKAYAMA
 
サーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップサーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップMasahiro NAKAYAMA
 
#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れよう#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れようMasahiro NAKAYAMA
 
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo Masahiro NAKAYAMA
 
クラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjpクラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjpMasahiro NAKAYAMA
 
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365Masahiro NAKAYAMA
 
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampIoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampMasahiro NAKAYAMA
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampMasahiro NAKAYAMA
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjpMasahiro NAKAYAMA
 
「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyo「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyoMasahiro NAKAYAMA
 
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyoBluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyoMasahiro NAKAYAMA
 
IoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスMasahiro NAKAYAMA
 
Serverless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcServerless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcMasahiro NAKAYAMA
 
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomugMasahiro NAKAYAMA
 

Plus de Masahiro NAKAYAMA (20)

ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
ハッカソンについて(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampイントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
イントロダクション(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccampクラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
 
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjpめもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
めもおきば新刊のお知らせ サーバーレスでHelloWorldする25の方法 #ssmjp
 
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp クラウド時代における分散Webシステムの構成とスケーリング #seccamp
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
 
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
#ServerlessDays Tokyo 2019 「サーバーレス」な同人誌の紹介
 
サーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップサーバーレス時代の システム設計ワークショップ
サーバーレス時代の システム設計ワークショップ
 
#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れよう#ssmjp 2018/12 技術系同人誌を手に入れよう
#ssmjp 2018/12 技術系同人誌を手に入れよう
 
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
FaaSのインターフェースに見るサーバーレス #serverlessconf #serverlesstokyo
 
クラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjpクラウドでハンズオンする話 #ssmjp
クラウドでハンズオンする話 #ssmjp
 
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
SORACOMでデータ上げてクラウドで分析・可視化するハンズオン #SecHack365
 
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccampIoT時代のセキュアなクラウドインフラ構築術 #seccamp
IoT時代のセキュアなクラウドインフラ構築術 #seccamp
 
Serverless book
Serverless bookServerless book
Serverless book
 
クラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccampクラウドではじめるリアルタイムデータ分析 #seccamp
クラウドではじめるリアルタイムデータ分析 #seccamp
 
技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp技術系同人誌を書こう #ssmjp
技術系同人誌を書こう #ssmjp
 
「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyo「サーバレスの薄い本」からの1年 #serverlesstokyo
「サーバレスの薄い本」からの1年 #serverlesstokyo
 
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyoBluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
 
IoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレス
 
Serverless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcServerless Architecture Overview #cdevc
Serverless Architecture Overview #cdevc
 
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
細かすぎて伝わらないSORACOM Funnelのオプション紹介 #soracomug
 

Dernier

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Dernier (7)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

今日から使い始めるChef

  • 1. 今日から使い始めるChef 2013-03-29 Xtone Ltd. ピザ会 (without pizza><) Aki / @nekoruri
  • 3. Chef • サーバの構成管理ツール – サーバの「完成状態」を書く ここ全部 – 「現状」との違いを判断する Chefが – その差分を埋める やってくれる • パッケージのインストール • 設定ファイルの設置 • サービスの起動 • DBのユーザ作成 • ファイアウォール設定 • etc.
  • 5. 禁止事項 • サーバ上でrootで設定ファイル変更 Chefで設定戻されて突然の障害
  • 6. 使ってみる 1. Chefのレポジトリを取ってくる 2. rootで入れるサーバを一台作る 3. 対象サーバにchef-soloを入れる – knife solo prepare root@192.0.2.100 4. ノード設定を適当に書く – vim nodes/192.0.2.100.json {"run_list": ["role[base]"]} 5. chef起動 – knife solo cook root@192.0.2.100
  • 7. 使ってみる 1. Chefのレポジトリを取ってくる 2. rootで入れるサーバを一台作る 3. 対象サーバにchef-soloを入れる – knife solo prepare root@192.0.2.100 4. ノード設定を適当に書く – vim nodes/192.0.2.100.json {"run_list": ["role[base]"]} 以降はここだけ 5. chef起動 – knife solo cook root@192.0.2.100
  • 9. Chef用語 • Resource – 設定の最小単位 – ファイルやパッケージ単位の設定 • Recipe – 複数のResourceで構成されるひとまとまり • Cookbook – Recipeをグループにまとめたもの – 一つのRecipeしか含まない場合もある • レポジトリ(キッチン) – Chefの動作に必要なファイル群 – 複数のCookbookや、ロール・ノードの設定を含む
  • 10. Chef用語 • ノード – Chefで管理されるサーバ • Role – ノードの役割を定義 – 使うRecipeとか変数とかをここで設定する(抽象化) • chef-solo – サーバ無しでChefを利用するコマンド – chef-soloを動かしたノード自身が操作対象となる • knife-solo – 対象ノードにレポジトリを転送してchef-soloを動かす
  • 11. Resource • 設定の最小単位 template '/etc/apache2/sites-available/www.example.jp' do – ファイル source 'www.example.jp.erb' mode '0644' ファイルを更新したら action :create apache2サービスを notifies :restart, "service[apache2]" 再起動 end – パッケージ %w{zsh zip sysstat libcache-cache-perl}.each do |pkg| package pkg do action :install 完全にRuby end end firewall_rule "zabbix" do – ファイアウォール port 10050 source "192.0.2.5" action :allow notifies :enable, "firewall[ufw]" end
  • 12. Recipe • 複数のResourceで構成されるひとまとまり munin_servers = [' 192.0.2.6/32', ' 192.0.2.140 /32'] package "munin-node" service_name = node['munin']['service_name'] Rubyの内部DSLなので 変数とかも利用し放題 service service_name do supports :restart => true action :enable end サーバ毎の設定を利用 template "#{node['munin']['basedir']}/munin-node.conf" do source "munin-node.conf.erb" mode 0644 variables :munin_servers => munin_servers 変数をerbに渡す notifies :restart, "service[#{service_name}]" end サーバの情報を利用して分岐 case node['platform'] when "arch", "smartos" execute "munin-node-configure --shell | sh" do not_if { Dir.entries(node['munin']['plugins']).length > 2 } notifies :restart, "service[#{service_name}]" end end
  • 13. Template log_level 4 log_file /var/log/munin/munin-node.log port 4949 pid_file /var/run/munin/munin-node.pid background 1 setseid 1 # Which port to bind to; host * サーバ毎の設定を利用 user root group <%= node['munin']['root']['group'] %> setsid yes <% end %> # A list of addresses that are allowed to connect. This must be a # regular expression, due to brain damage in Net::Server, which # doesn't understand CIDR-style network notation. You may repeat # the allow line as many times as you'd like 引き渡された変数を利用 allow ^127¥.0¥.0¥.1$ <% @munin_servers.sort.each do |server| -%> cidr_allow <%= server %> <% end -%>
  • 14. Cookbookの構成 cookbooks/munin ├── README.md ├── attributes 変数のデフォルト値 ├── definitions ├── files erbしない配布ファイル │ └── default ├── libraries ├── metadata.rb ├── providers デフォルトのRecipe ├── recipes 「munin」で利用可能 │ └── default.rb │ └── server.rb デフォルト以外のRecipe ├── resources 「munin::server」で利用可能 └── templates └── default 配布ファイルの置き場 erb利用可能
  • 16. レポジトリを作る • knife-solo gemを入れる % gem install knife-solo • knife soloでレポジトリ作成 % knife solo init demo % cd demo % git init % git add . % git commit -m 'new chef repo'
  • 17. opscode-cookbooks • Chef開発元が公開しているCookbook集 – オープンソースとして開発 – Github上で公開 https://github.com/opscode-cookbooks/ – Ubuntuなら組み合わせるだけでそのまま使える ※ CentOSだとイマイチという意見多し(未確認) – knifeコマンドで取ってこれる
  • 18. opscode-cookbooksのインポート • knife cookbookでCookbookを取ってくる % knife cookbook site install apt -o cookbooks % knife cookbook site install users -o cookbooks % knife cookbook site install sudo -o cookbooks 依存関係を見て引っ張って % knife cookbook site install mysql -o cookbooks くるツールがあるが、 今回は未使用 • knife-github-cookbooksというgemもある – github上の任意のCookbookをインポートできる
  • 19. 新しくCookbook/Recipeを作る • knife cookbook createでCookbookを作成 – site-cookbooks以下に置くのが慣習 % knife cookbook create base -o site-cookbooks • Recipeを書いていく % vim site-cookbooks/base/recipes/default.rb include_recipe 'apt' # ユーザ設定 include_recipe 'users::sysadmins' node.override['authorization']['sudo']['passwordless'] = true include_recipe 'sudo'
  • 20. Roleに経由してRecipeを利用する • ロールに対して利用するレシピを設定 % vim roles/base.rb name "base" description "base packages" run_list( 'recipe[base]', 'recipe[mysql::server]' ) default_attributes({ 'mysql' => { 'server_root_password' => 'rootpw', 'server_repl_password' => 'replpw', 'server_debian_password' => 'maintpw', 'tunable' => { 'log_bin' => 'mysqld' } } })
  • 21. Roleに経由してRecipeを利用する • ノードに対してロールを紐付ける % nodes/192.0.2.100.json { "run_list": ["role[base]"], "mysql": { ノード別で異なる設定は "tunable": { ここで定義できる "server_id": "1", "innodb_buffer_pool_size": "2048M", "innodb_log_file_size": "128M" } } }
  • 22. data_bags • ユーザ情報などを置いておけるデータ置き場 – chef-solo環境だと、data_bagsディレクトリ内 % data_bags/users/hoge.json { "id": "hoge", "uid": "10001", "comment": "FOO Bar", "ssh_keys": [ "ssh-rsa AAAAなんちゃら= hoge@example.jp" ], "groups": [ "sysadmin" ], "shell": "/usr/bin/zsh" }
  • 23. chef-solo実行 1. 対象サーバにchef-soloを入れる – knife solo prepare root@192.0.2.100 2. chef起動 – knife solo cook root@192.0.2.100
  • 25. apt • aptレポジトリの更新 – https://github.com/opscode-cookbooks/apt – 「include_recipe 'apt'」でapt-getしてくれる – 使わないと古いパッケージを取りに行き失敗
  • 26. users::sysadminsとsudo • ユーザ管理(users::sysadmins) – https://github.com/opscode-cookbooks/users – data_bagsにsysadminグループのユーザ設定を入 れておくと勝手に作ってくれる – ユーザ追加の度にRecipeを変更しなくてよい • sudoers管理(sudo) – 上記sysadminグループはデフォルトで入ってる
  • 27. firewall • ファイアウォールのルール設定 – https://github.com/opscode-cookbooks/firewall firewall "ufw" do firewall Cookbookで定義された action :enable 独自リソース end firewall_rule "ssh" do port 22 action :allow notifies :enable, "firewall[ufw]" end – Ubuntu標準ではpingが拒否されているので、 変更したbefore.ruleも配る
  • 28. apache2 / php • 各ミドルウェアを入れてくれる – https://github.com/opscode-cookbooks/apache2 node.default['apache']['listen_ports'] = [80, 443] node.default['apache']['serversignature'] = 'Off' node.default['apache']['traceenable'] = 'Off' include_recipe 'apache2::mod_proxy_http' include_recipe 'apache2::mod_php5' include_recipe 'apache2::mod_rewrite' include_recipe 'apache2::mod_ssl' include_recipe 'apache2' include_recipe 'php::package' include_recipe 'php::module_apc' include_recipe 'php::module_mysql' include_recipe 'php::module_gd' node.default['php']['directives'] = { 'date.timezone' => 'Asia/Tokyo' }
  • 29. mysql / database • データベースのユーザを作成する – https://github.com/opscode-cookbooks/database include_recipe 'database::mysql' mysql_connection_info = { :host => "localhost", :username => 'root', :password => node['mysql']['server_root_password'] } mysql_database 'myapp_production' do connection mysql_connection_info action :create end mysql_database_user 'myapp_production' do connection mysql_connection_info password 'passwordpassword' database_name 'myapp_production' host 'localhost' action :create end
  • 30. 関連情報 • 伊藤直也さんの電子書籍がベスト – 入門Chef Solo - Infrastructure as Code http://www.amazon.co.jp/dp/B00BSPH158/ http://tatsu-zine.com/books/chef-solo • opscode-cookbooksを読む – 宝の山 – https://github.com/opscode-cookbooks
  • 32. Unicorn環境 • unicorn::default – Unicorn gemいれる→普通Bundlerだし – 設定ファイル→アプリと一緒にデプロイするし • application_ruby::unicorn – 似てるようで似てるだけのCapistranoデプロイと いまいち相性が悪い! – runitでUnicornのプロセス自動再起動!すごい! – graceful restartさせると死ぬ!すごい!!1
  • 33. OpsWorks • AWS + Chef – http://aws.amazon.com/jp/opsworks/ – AWS提供のChef Cookbookを組み合わせる – まだ遊んでない
  • 34. その他のアプローチ • RightScale / Scalr – もう一つ上のレイヤーでの構成管理したい派 – Xtoneでも某ゲーム案件で利用 • PaaS – そもそもミドルウェアなんて面倒みたくない派 – Heroku、EngineYard、 AWS Elastic Beanstalk ニフクラC4SA、IIJ Mogok