Upload
koji-nakamura
View
7.008
Download
4
Embed Size (px)
DESCRIPTION
2013/06/21 社内勉強会資料
Citation preview
アジェンダ現状と問題
Vagrant
Chef
まとめ
訂正開発スピードを上げる話
開発スピードを下げない話
現状と問題
現状(1)複雑なアプリケーションスタック
+-------+ |BIG-IP | <= SSL通信はここで解決、ローカルでは代替Apacheが必要... +-------+ | +-------+ |Varnish| +-------+ | +-------+ |Apache | +-------+ |Tomcat | +-------+ |(App) | +-------+ |Fluentd| +-------+ | +---------+---------+---------+ | | | | +-------+ +-------+ +-------+ +-------+ +-------+ |Log | |Solr | |MySQL | |MongoDB| |etc... | +-------+ +-------+ +-------+ +-------+ +-------+
現状(2)バージョン管理されないサーバリソース
ホスト/ネットワーク設定
インストールされたパッケージ/ライブラリ
サービス/rc.dスクリプト/confファイル
cron設定
etc...
発生している事象サーバ構成を確認するのが手間
サーバ構成の変更履歴を把握するのが難しい
同じ環境を構築するのに時間がかかる
productionと同じローカル環境を構築できない
問題サーバ環境/構成に関して、
トレーサビリティが低い
メンテナンスビリティが悪い
ポータビリティが低い
使い捨てできるアドホックな環境がない
_人人人人人人人人人人_> 開発スピードの低下 <‾YYYYYYYYYY‾
解決策Vagrant + Chef
Vagrant
Vagrant仮想化ソフトウェアのCLIツール
VirtualBox, VMwareに対応
配布されているboxでゲストOSを起動
Rubyの内部DSLで設定ファイルを記述
Win, Macにはインストーラーで簡単インストール
Vagrantで何ができる?ゲストOSをCLIでサクっと起動できる$ tree.!"" Vagrantfile
0 directories, 1 file$ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "centos6_4" config.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box"end$ vagrant up$ vagrant ssh$ cat /etc/issueCentOS release 6.4 (Final)Kernel \r on an \m
Vagrantで何ができる?ゲストOSの破棄→作り直しがサクっとできる$ vagrant destroy$ vagrant up
Vagrantで何ができる?環境をまるっとコピーして配布できる$ vagrant package$ tree.#"" Vagrantfile!"" package.box <= packageコマンドで作成されたboxファイル
0 directories, 2 files
Vagrantで何ができる?複数のゲストOSを立ち上げ、Privateネットワークを構築できる$ cat Vagrantfile Vagrant.configure("2") do |config| config.vm.define :web do |web| web.vm.box = "centos6_4" web.vm.network :private_network, ip: "192.168.33.10" end config.vm.define :db do |db| db.vm.box = "centos6_4" db.vm.network :private_network, ip: "192.168.33.11" endend$ vagrant up$ vagrant ssh web <= 複数起動時は引数にvm-nameを渡す
VagrantまとめVagrantでローカル使い捨て環境が準備できる
設定ファイルをバージョン管理して配布すれば同じ仮想化環境を利用できる
Chef
Chefサーバ構成を管理するソフトウェア
Rubyの内部DSLで記述されたレシピと、各種属性情報なども含めたクックブックで構成が表現される
クックブックを適用することで構成が定められた状態となる(冪等性の保証)
サーバ上のあらゆるリソースをクックブックで表現
パッケージ,サービス,設定ファイル,cron設定, ...
クラサバなChef
Chef-soloとKnife-soloローカルではクラサバなChefはオーバースペック
単一サーバでクックブックを適用するChef-solo
リモートでChef-soloを実行するKnife-soloが便利
Knife-solo自体はChefのプラグイン
VagrantゲストOSの構成管理はホストOSからKnife-soloを使うのがオススメ
Railsアプリのレシピ(1)group 'www' do group_name 'www' gid 505 action :createend
user 'www' do comment 'www' uid 505 group 'www' home '/home/www' shell '/bin/bash' password nil supports :manage_home => true action [:create, :manage]end
git "/home/www/rails_app" do repository '/path/to/repository.git' revision 'HEAD' user 'www' group 'www' action :syncend
Railsアプリのレシピ(2)bash "bundle_install" do user 'www' cwd '/home/www/rails_app' code 'bundle install --deployment' action :runend
template "/etc/init.d/unicorn_rails" do mode "0755" source "unicorn_rails.erb"end
template "/home/www/rails_app/unicorn_rails.conf" do mode "0644" owner "www" group "www" source "unicorn_rails.conf.erb"end
service "unicorn_rails" do action [ :enable, :start ] subscribes :restart, resources(:template => "/home/www/rails_app/unicorn_rails.conf")end
まとめ
最初に提示した問題サーバ環境/構成に関して、
トレーサビリティが低い
メンテナンスビリティが悪い
ポータビリティが低い
使い捨てできるアドホックな環境がない
最初に提示した問題トレーサビリティとメンテナンスビリティ
Chefクックブックがバージョン管理されれば解決
ポータビリティとアドホック環境
ローカルはVagrant+Chefで、本番環境もChefで構築するポリシーとすれば解決
Chefクックブックは誰が書いていく?
アプリケーションエンジニア、インフラエンジニア両方で書いくべき(提案)
クックブックのテストはローカルVagrant環境で
クックブックはバージョン管理して共有すべき