More Related Content
Similar to Pythonユーザのための構成管理入門 #pyconapac
Similar to Pythonユーザのための構成管理入門 #pyconapac (20)
More from Takeshi Komiya (20)
Pythonユーザのための構成管理入門 #pyconapac
- 2. 自己紹介:小宮 健
仕事
(株)タイムインターメディア所属
参加コミュニティ
Sphinx-users.jp
Python mini hack-a-thon
Author of blockdiag
Chef 歴 1.5年ぐらい
Community cookbook 推進派です
こつこつ Pull Req. 投げてます
Twitter: @tk0miya
- 10. 環境を管理する
環境を管理するいくつかの方法
手順書を用意する
シェルスクリプトにする
PXE + kickstart による自動インストール
sed/awk などによる設定ファイル書き換え
PHP で設定ファイルを生成したことがあります
オレオレパッケージ(rpm,debなど)を作る
AMI や VM snapshot を作る
構成管理ツールを使う
- 12. 冪等性 (べきとうせい)
何度実行しても同じ結果になるという性質
たとえば echo “…” >> /path/to/conf はダメ
環境構築スクリプトが冪等性を持っている
と…
サーバの新規構築にも使える
既存のサーバのアップグレードにも使える
何度実行してもエラーにならない
AMI や VM snapshot と相性がいい
いつ保存したものでも、実行すれば最新状態に
- 14. 著名な構成管理ツール (1)
Puppet
Ruby 製の構成管理ツール
比較的歴史があり、長く使われている
各サーバにインストールして利用する
クライアント-サーバ型 もしくは単体実行
独自の DSL で環境の定義を行う
puppet-forge という共有リポジトリがある
誰かが書いた定義を使うことができる
例: MySQL のインストール、設定の定義
- 15. 著名な構成管理ツール (2)
Chef
Ruby 製の構成管理ツール
去年ブームになった構成管理の火付け役
各サーバにインストールして利用する
クライアント-サーバ型 もしくは単体実行
独自の DSL で環境の定義を行う
Rubyベースなのでループや if などが使える
OpscodeCommunityという共有リポジトリが
ある
誰かが書いた定義を使うことができる
- 16. 著名な構成管理ツール (3)
Ansible
Python 製の構成管理ツール
興味を持っている人が多い注目株
サーバへのインストールは不要
SSHで接続して操作を行う
YAML ベースの DSL で環境の定義を行う
他の言語で補助コマンドを作ることも可能
今のところ共有リポジトリは存在しない
- 17. 著名な構成管理ツール (4)
Fabric + cuisine
Python 製のツール
リモート管理ツール(fabric)とその拡張機能
あまり利用事例は多くないが、書きやすい
サーバへのインストールは不要
SSHで接続して操作を行う
Python スクリプトで環境の定義を行う
Fabric, cuisine が提供する関数を用いる
今のところ共有リポジトリは存在しない
- 18. 環境構築ツールの比較
名前 言語 定義 インストー
ル
共有
リポジト
リ
Puppet Ruby 独自DSL 必要 ○
Chef Ruby 内部DSL 必要 ○
Ansible Python YAML 不要 ×
Fabric +
Cuisine
Python Python 不要 ×
- 21. 構成管理ツール Chef
Chef
Ruby 製の構成管理ツール
管理対象のホストにインストールして使う
サーバ/クライアント型 (単体実行も可能)
cookbook で環境を定義する
インストール手順や設定方法をまとめたもの
ソフトウェア単位で作成することが多い
例: MySQL用cookbook、Postfix用cookbook
- 22. Chef の種類
Chef-Server / Chef-Client
大規模用
ホスト間の連携(Orchestration)が可能
設定の自動反映
Hosted Chef
ASP 版 Chef-Server
Chef-solo
単体で稼働する (実行ホストの設定をする)
手動で実行する
20台ぐらいまでは chef-solo で十分
まずはここからはじめましょう
- 26. 設定ファイルを書く
solo.rb
chef-solo の設定ファイル。主にパスを設定す
る
solo.json
chef-solo の定義ファイル (JSON形式)。
run_list: 実行する cookbook を列挙する
attributes: 各 cookbook に対するパラメータ
設定できる値は各 cookbook の README 参照のこと
例: ntp の設定情報
- 29. 実際の構築例
とある Rails アプリ用の環境
OS 設定
yum の設定 (EPEL, repoforge), timezone
iptables, SELinux 無効化
logrotate, rsyslog, NTP
nginx, postfix, MySQL
開発言語/ツール
Ruby, Python
vim, screen, git, mercurial, TeXLive
Jenkins, Jenkins プラグイン
- 34. 著名なデプロイツール (1)
Fabric
Python 製のツール
Python スクリプトで操作を定義する
プリミティブな機能が提供されている
複雑な操作は自分で実装する必要がある
def create_link():
run("ln -s /usr/local/bin/ruby /usr/bin/ruby”)
- 35. 著名なデプロイツール (2)
Capistrano
Ruby 製のツール
Ruby スクリプトで操作を定義する
あらかじめいくつかの機能を持っている
VCS からのチェックアウト、デプロイ
ソースコードの切り戻しに対応
task :create_link do
run "ln -s /usr/local/bin/ruby /usr/bin/ruby”
end