Your SlideShare is downloading. ×
明日から始める Chef 入門 #bpstudy
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

8,478
views

Published on

Published in: Technology

0 Comments
43 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,478
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
54
Comments
0
Likes
43
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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