SlideShare a Scribd company logo
(株)タイムインタメーディア
小宮健
http://www.flickr.com/photos/yelpar/6678239091/
自己紹介:小宮 健
 仕事
 (株)タイムインターメディア所属
 テクニカルオフィサ(技術責任者)として活動
 参加コミュニティ
 Sphinx-users.jp
 Python mini hack-a-thon
 Chef 歴 1年ぐらい
Twitter: @tk0miya
サーバ構築、どうやっていますか
 手順書ベース
 サーバ設定シート (から推測)
 Wiki に集約
 職人芸 (担当者しかしらない)
 構築依頼 / アップデート依頼(申請制)
よくある話
 記述通りに構築しても動かない
 そもそも記述通りに進まない
 そもそも手順がまとまっていない
 隣の人と入っているパッケージが違う
 なぜかサーバごとに設定が違う(歴史的経
緯)
 手順を飛ばして本番で事故る
 バッチが停止したままだった
 何十台も手作業で設定してるとつい…
 手順書にはクロスチェック欄がある
そうだ自動化しよう
 シェルスクリプトでまとめる
 PXE + kickstart によるインストール
 sed/awk などによる設定ファイル書き換え
 PHP で設定ファイルを生成したことがありま
す
 オレオレパッケージを作る
 本番環境と同じ方法で開発
環境を構築せよ
 本番用スクリプトでは最後
までテストされない
 開発開始時点から環境構築
を自動化する
 この書籍では puppet が紹
介されている
継続的デリバリー
自動化ツールについて調べてみた
 自動化ツールの種類 (@tk0miya 調べ)
 アプローチの違い
 手順ベース
 定義ベース
 インストールが必要か
 共有リソースの有無
手順ベース
 実行するコマンドを羅列する
 シェルスクリプトも手順ベースに含まれる
 例:
run "apt-get -y install nginx”
sudo "curl -o /etc/nginx/sites-available
https://.../nginx/default”
sudo "/etc/init.d/nginx restart”
定義ベース
 システムのあるべき姿を定義する
 nginx が入っている
 nginx は /var/www/html を公開している
 冪等性(べきとうせい)を持つ
 何度実行しても同じ結果になる
 例:
package "nginx" do
action :install
end
file "/etc/nginx/sites-available/default" do
source “nginx-default” # 用意しておいた設定をコピーす
る
end
定義ベース vs 手順ベース
 手順ベース
 コマンドベースなのでわかりやすい
 何度か実行することを想定していない(ものも
ある)
 現在の状態を意識する必要がある
 手作業とまぜやすい
 定義ベース
 定義の仕方を覚える必要がある
 何度実行してもよい
 状態は意識しなくてよい (大抵は)
 定義に基づいて手作業の結果が消えたりする
インストールが必要か
 構築するホストにインストールが必要かど
うか
 インストールが必要なタイプ
 クライアント・サーバ構成のもの
 各ホストにクライアントを入れる必要がある
 インストールが不要なタイプ
 SSH でコマンドを逐次実行させる
 実行するマシンにだけインストールが必要
共有リソース
 よく使う定義(手順)は共有されているか
 nginx のインストール定義を毎回書きたく
ない
 各言語のパッケージリポジトリのようなも
の
 rubygems, PyPI, CPAN, PEAR
環境構築ツールの比較
名前 言語 種別 インストー
ル
共有
リソース
Puppet Ruby 定義ベー
ス
○ ○
Chef Ruby 定義ベー
ス
○ ○
Salt Python 定義ベー
ス
○ ×
Ansible Python 定義ベー
ス
× ×
Cinnamon Perl 手順ベー
ス
× ×
Capistrano Ruby 手順ベー × △
(株)タイムインタメーディア
小宮健
http://www.flickr.com/photos/yelpar/6678239091/
Chef がカバーしてくれること
 OS/distro. パッケージの操作
 ファイル操作
 サービスの起動/停止
 ユーザ作成
 gem, python パッケージのインストール
 VCS (git, hg, etc) からのダウンロード
 などなど
Chef の特徴
 定義ベースの構成管理ツール
 Cookbook という定義を持つ
 冪等性を持っている
 各ホストへ chef のインストールが必要
 共有リソースをもっている
 Opscode Community
 皆で Cookbook を共有している
 github でも公開されている
Chef を使っている企業
 37 signals
 Facebook
 CyberAgent
 Amazon OpsWorks
Chef の種類
 Chef-Server / Chef-Client
 大規模用
 ホスト間の連携
 設定の自動反映
 Chef-solo
 単体で稼働する (実行ホストの設定をする)
 手動で実行する
 Hosted Chef
 ASP版 Chef-Server
どの Chef を使えばいいの?
 Chef-solo
 Chef の概念を把握したい人
 管理対象のホストが20台以下の人
 Chef-Server / Hosted Chef
 大量のホストを管理してる人
 今回は chef-solo をベースに説明します
Chef のインストール
 事前に以下の設定を済ませておく必要があ
る
 OS のインストール
 ネットワークの設定
 sudo 可能なユーザ作成 (chef-solo を使う人の
み)
 この部分は PXE/kickstart/AMI などでカ
バー
Chef のインストール
 Chef-Server
 Opscode.com から rpm/deb をダウンロード
 Chef-Client / Chef-solo
 以下のコマンドを実行
curl -L https://www.opscode.com/chef/install.sh | sudo
bash
 /opt/chef 以下にファイルがインストールされ
る
 一部、/usr/bin, /etc/chef にファイルが入る
chef で環境構築をしていく流れ
1. 設定する対象を決める
 例: ntpd をインストールする
2. community site で cookbook を探す
3. 試してみる
4. 合わなかったら自分で書く
community site で cookbook を探す
 http://community.opscode.com/ にアクセ
ス
 検索ボックスにキーワードを指定してみる
 例: ntp
 ダウンロードした tarball を展開しておく
community cookbooks を使ってみる
 chef-solo 実行用のファイルを作る
 solo.rb
 chef-solo の設定ファイル。ディレクトリ等を
設定
 solo.json
 run_list: 実行する cookbooks を列挙
 attributes: 設定情報
 設定できる値は cookbook の README 参照のこと
 ntp の設定情報
community cookbooks を使ってみる
 solo.rb
file_cache_path "/home/app/chef-solo/cache"
cookbook_path "/home/app/chef-solo/cookbooks”
 solo.json
{
"ntp" : {
"servers" : ["ntp.nict.jp”]
},
"run_list" : ["recipe[ntp]”]
}
community cookbooks を使ってみる
 chef-solo を実行する
$ sudo chef-solo -j solo.json -c solo.rb
community cookbook が合わない場合
 望みどおり設定されない…
 希望どおり設定できない
 特殊なビルドオプションを指定したい
 cookbook がバグっていて動かない
 そんな場合は自分で cookbook を書きます
Cookbook の作り方 (簡易版)
 knife コマンドでひな形を作る
 $ knife cookbook create my_cookbook -o
cookbooks
 my_cookbook/recipes/default.rb を書き換
える
 この資料では代表的なものを紹介します
 詳細はドキュメントや他人のコードを参考の
こと
Cookbook の作り方 (簡易版)
 パッケージを入れたい場合
package "ntp”
 サービスを自動起動にする
service "ntp" do
action [:enable, :start]
end
Cookbook の作り方 (簡易版)
 ファイルを書き換える場合
cookbook_file "/etc/ntp.conf" do
# files/default/ntp.conf がコピーされる
source "ntp.conf"
# 書き換えたら再起動
notifies :restart, "service[ntp]"
end
Cookbook の作り方 (簡易版)
 その他 (shell script 実行)
script "some special process" do
interpreter "bash"
code <<-EOH
curl -O http://.../ntp-4.2.6p5.tar.gz
tar xzf ntp-4.2.6p5.tar.gz
cd ntp-4.2.6p5
./configure; make; make install
EOH
# インストールされていたら実行しない
not_if { ::File.exists?('/usr/local/sbin/ntpd') }
end
利用事例の紹介
 Rails アプリ環境を作る
 案件で利用した cookbook をお見せします
 Jenkins サーバを構築する
 EC2 上で Jenkins サーバを立てます
 時間があれば
利用事例の紹介
 Rails アプリ環境を作る
 ネットワーク設定
 iptables, SELinux 無効化, timezone, NTP
 OS 設定
 Yum の設定 (EPEL, repoforge)
 logrotate, rsyslog
 Nginx, postfix
 開発言語/ツール
 Python (Ruby は capistrano でインストール)
 Vim, screen, git, mercurial
 Jenkins + TeXLive
chef-solo 周辺ツール紹介
 vagrant
 仮想環境の CLI 操作ツール
 VirtualBox, EC2, VMWare Fusion などに対応
 ヴェイグラントと読むらしい
 chef の試行錯誤に VM を使い捨てて実験する
 librarian-chef / berkshelf
 Community/githubからcookbooksをダウン
ロード
 cookbooks 同士の依存関係も解決する
 bundler, requirements.txt のような位置づけ
chef-solo 周辺ツール紹介
 knife-solo / paratrooper-chef
 chef-solo をリモート実行するツール
 knife-solo は単体コマンド
 paratrooper-chef は capistrano 経由
chef に関する情報源
 公式ドキュメント (docs.opscode.com)
 伊藤直也さんの電子書籍
 用語などの基礎が押さえられます
 #opschef, #opschef_ja
 各種 chef 勉強会
 (おまけ) id:tk0miya のブログ
待ち構えている罠たち
 community cookbooks の不備・不足
 動かないものがある
 似たようなものがたくさんある
 users, generic-users, users_solo, user, accounts
 長時間ハマる前に見切りをつけて、新しく書
く
 できればパッチを投げましょう :-)
 全員が chef を覚える必要がある
 手作業でいじったものは失われてしまう
待ち構えている罠たち
 まだ定石が存在しない
 多くの人がまだ手探りで使っている
 みんなで情報共有していく必要がある
 テストが難しい
 やったつもりが出来ていないのを防ぐ
 Chefspec, Serverspec あたりを使うらしい
chef ってどれくらい幸せになれるの?
 覚えるまでに苦労がある
 新しい設定で苦労する
 postfix の設定で半日かかった (手動なら 10分)
 再利用、量産すると効果が出てくる
 運用はまだまだ経験/知識が必要そう
まとめ
 chef を使うと環境構築ができる
 community cookbooks で省力できる
 ただし、罠は結構残っている状態
 始めるにはコスト覚悟の上で
 長い目で見て使って行きましょう

More Related Content

PDF
Chef社内勉強会(第1回)
PPTX
ネットワークエンジニアのための Puppet / Chef
PPTX
Puppetのススメ
PDF
Windows7でもchefしたい!
PPTX
Pythonユーザのための構成管理入門 #pyconapac
PDF
Chefで始めるWindows Server構築
PPTX
Chef windows linux環境構築
PDF
ChefとPuppetの比較
Chef社内勉強会(第1回)
ネットワークエンジニアのための Puppet / Chef
Puppetのススメ
Windows7でもchefしたい!
Pythonユーザのための構成管理入門 #pyconapac
Chefで始めるWindows Server構築
Chef windows linux環境構築
ChefとPuppetの比較

What's hot (20)

PPTX
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
PPTX
Chef概論とレシピ実践入門
PDF
Niigata.pm #1
PDF
Ansible quickstart
PDF
Ansibleで始めるインフラ構築自動化
PDF
NDS#31
PDF
What is an Ansible?
PDF
Ansible 入門 #01 (初心者向け)
PDF
Ansible 2.0 のサマライズとこれから
PDF
入門Ansible
PDF
入門 Chef Server #biglobetechtalk
PDF
Redmine Ansible
PDF
仮想マシンを使った開発環境の簡単共有方法
PDF
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
PDF
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
PDF
サーバ構築を自動化する 〜Ansible〜
PPTX
Ansible ではじめるインフラのコード化入門
PDF
Ansibleで味わうHelion OpenStack
PDF
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
PDF
Vagrant環境のAnsibleを速くしたい
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
Chef概論とレシピ実践入門
Niigata.pm #1
Ansible quickstart
Ansibleで始めるインフラ構築自動化
NDS#31
What is an Ansible?
Ansible 入門 #01 (初心者向け)
Ansible 2.0 のサマライズとこれから
入門Ansible
入門 Chef Server #biglobetechtalk
Redmine Ansible
仮想マシンを使った開発環境の簡単共有方法
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
サーバ構築を自動化する 〜Ansible〜
Ansible ではじめるインフラのコード化入門
Ansibleで味わうHelion OpenStack
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
Vagrant環境のAnsibleを速くしたい
Ad

Viewers also liked (20)

PPTX
Chef社内向け解説とその課題について
PDF
はかどるChefの小ネタ集
PDF
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
PDF
Pentaho ETL
PDF
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
PDF
Chef meetup vol2_higanwoks
PDF
S16 Microsoft Azure 上での Chef 環境の構成
PPTX
Ansible container
PPTX
Serverspec at hbstudy #45
PDF
RubyでDSL
PDF
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
PPT
Chef on azure
PPTX
DevOpsにおけるAnsibleの立ち位置と使い所
PDF
AnsibleによるInfrastructure as code入門
PDF
Ansibleの現在とこれから
PDF
レシピの作り方入門
PDF
データベース技術の羅針盤
PPTX
DevOps Practices: Configuration as Code
PDF
Chefで作る開発環境
PDF
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Chef社内向け解説とその課題について
はかどるChefの小ネタ集
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
Pentaho ETL
MarketPlaceのAMIをPackerで作る時、 Chefは3度配膳する
Chef meetup vol2_higanwoks
S16 Microsoft Azure 上での Chef 環境の構成
Ansible container
Serverspec at hbstudy #45
RubyでDSL
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
Chef on azure
DevOpsにおけるAnsibleの立ち位置と使い所
AnsibleによるInfrastructure as code入門
Ansibleの現在とこれから
レシピの作り方入門
データベース技術の羅針盤
DevOps Practices: Configuration as Code
Chefで作る開発環境
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Ad

Similar to 明日から始める Chef 入門 #bpstudy (20)

PPTX
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
PDF
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
PPTX
Aizu.LT::Tokyo #4
PDF
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
PDF
Haikara
PPTX
3分間 開発環境クッキング 2012.07 #pyfes
PPTX
Cloudstack user group meeting in osaka
ODP
20090704rubyist九州
ODP
Programming camp Codereading
PPTX
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
PDF
behatエクステンションの作り方
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PDF
Using Chef for Infrastructure Automation of Ameba Pigg
PDF
osc_tokyo20100226
KEY
Itcamp長崎2012 capistrano
PDF
自宅で出来る!ゲームサーバの作り方
PDF
DevOps 研修 中級編#01
PDF
debexpo(mentors.d.n)をハックするには
PDF
scala-kaigi1-sbt
PDF
How to run P4 BMv2
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Aizu.LT::Tokyo #4
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Haikara
3分間 開発環境クッキング 2012.07 #pyfes
Cloudstack user group meeting in osaka
20090704rubyist九州
Programming camp Codereading
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
behatエクステンションの作り方
はてなにおける継続的デプロイメントの現状と Docker の導入
Using Chef for Infrastructure Automation of Ameba Pigg
osc_tokyo20100226
Itcamp長崎2012 capistrano
自宅で出来る!ゲームサーバの作り方
DevOps 研修 中級編#01
debexpo(mentors.d.n)をハックするには
scala-kaigi1-sbt
How to run P4 BMv2

More from Takeshi Komiya (20)

PPTX
APIドキュメントの話 #sphinxjp
PPTX
マークアップ言語の拡張 メリットとデメリット #hankumi
PPTX
ドキュメントの話、しませんか? #428rk01
PPTX
Sphinx拡張 探訪 2014 #sphinxjp
PPTX
個人的なさがしもののはなし #rubyhiroba
PPTX
俺の嫁と行った場所 #pykonjp2014
PPTX
発見・探検・ぼくのだいあぐ #pykonjp2014
PPTX
Excel 方眼紙撲滅委員会 活動報告 2013.9 #yapcasia
PPTX
Paratrooper chef の紹介 @ Chef Casual Talks Vol.2 #eytokyo
PPTX
Roundsmanの紹介 @ Chef Casual Talks Vol.1 #eytokyo
PPTX
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
PPTX
Inside of excel 方眼紙撲滅委員会 #pyfes
PPTX
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
PPTX
Life with Sphinx 2012 #sphinxconjp
PPTX
Excel 方眼紙撲滅委員会 活動報告 2012.09 #yapcasia #ltthon
PPTX
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
PPTX
Excel 方眼紙撲滅委員会 活動報告 2012.09 #pyconjp
PPTX
最近つくった Sphinx 拡張の話 2012.08 #pyfes
PPTX
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
PPTX
五番目のダイアグ、現る。 2012.08 #pyfes #blockdiag
APIドキュメントの話 #sphinxjp
マークアップ言語の拡張 メリットとデメリット #hankumi
ドキュメントの話、しませんか? #428rk01
Sphinx拡張 探訪 2014 #sphinxjp
個人的なさがしもののはなし #rubyhiroba
俺の嫁と行った場所 #pykonjp2014
発見・探検・ぼくのだいあぐ #pykonjp2014
Excel 方眼紙撲滅委員会 活動報告 2013.9 #yapcasia
Paratrooper chef の紹介 @ Chef Casual Talks Vol.2 #eytokyo
Roundsmanの紹介 @ Chef Casual Talks Vol.1 #eytokyo
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Inside of excel 方眼紙撲滅委員会 #pyfes
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Life with Sphinx 2012 #sphinxconjp
Excel 方眼紙撲滅委員会 活動報告 2012.09 #yapcasia #ltthon
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Excel 方眼紙撲滅委員会 活動報告 2012.09 #pyconjp
最近つくった Sphinx 拡張の話 2012.08 #pyfes
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
五番目のダイアグ、現る。 2012.08 #pyfes #blockdiag

明日から始める Chef 入門 #bpstudy