27
VagrantとChefで 開発スピードを上げる話 [email protected]

VagrantとChefで開発スピードを上げる話

Embed Size (px)

DESCRIPTION

2013/06/21 社内勉強会資料

Citation preview

Page 1: VagrantとChefで開発スピードを上げる話

VagrantとChefで開発スピードを上げる話

[email protected]

Page 2: VagrantとChefで開発スピードを上げる話

アジェンダ現状と問題

Vagrant

Chef

まとめ

Page 3: VagrantとChefで開発スピードを上げる話

訂正開発スピードを上げる話

開発スピードを下げない話

Page 4: VagrantとChefで開発スピードを上げる話

現状と問題

Page 5: VagrantとChefで開発スピードを上げる話

現状(1)複雑なアプリケーションスタック

+-------+ |BIG-IP | <= SSL通信はここで解決、ローカルでは代替Apacheが必要... +-------+ | +-------+ |Varnish| +-------+ | +-------+ |Apache | +-------+ |Tomcat | +-------+ |(App) | +-------+ |Fluentd| +-------+ | +---------+---------+---------+ | | | | +-------+ +-------+ +-------+ +-------+ +-------+ |Log | |Solr | |MySQL | |MongoDB| |etc... | +-------+ +-------+ +-------+ +-------+ +-------+

Page 6: VagrantとChefで開発スピードを上げる話

現状(2)バージョン管理されないサーバリソース

ホスト/ネットワーク設定

インストールされたパッケージ/ライブラリ

サービス/rc.dスクリプト/confファイル

cron設定

etc...

Page 7: VagrantとChefで開発スピードを上げる話

発生している事象サーバ構成を確認するのが手間

サーバ構成の変更履歴を把握するのが難しい

同じ環境を構築するのに時間がかかる

productionと同じローカル環境を構築できない

Page 8: VagrantとChefで開発スピードを上げる話

問題サーバ環境/構成に関して、

トレーサビリティが低い

メンテナンスビリティが悪い

ポータビリティが低い

使い捨てできるアドホックな環境がない

Page 9: VagrantとChefで開発スピードを上げる話

_人人人人人人人人人人_> 開発スピードの低下 <‾YYYYYYYYYY‾

Page 10: VagrantとChefで開発スピードを上げる話

解決策Vagrant + Chef

Page 11: VagrantとChefで開発スピードを上げる話

Vagrant

Page 12: VagrantとChefで開発スピードを上げる話

Vagrant仮想化ソフトウェアのCLIツール

VirtualBox, VMwareに対応

配布されているboxでゲストOSを起動

Rubyの内部DSLで設定ファイルを記述

Win, Macにはインストーラーで簡単インストール

Page 13: VagrantとChefで開発スピードを上げる話

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

Page 14: VagrantとChefで開発スピードを上げる話

Vagrantで何ができる?ゲストOSの破棄→作り直しがサクっとできる$ vagrant destroy$ vagrant up

Page 15: VagrantとChefで開発スピードを上げる話

Vagrantで何ができる?環境をまるっとコピーして配布できる$ vagrant package$ tree.#"" Vagrantfile!"" package.box <= packageコマンドで作成されたboxファイル

0 directories, 2 files

Page 16: VagrantとChefで開発スピードを上げる話

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を渡す

Page 17: VagrantとChefで開発スピードを上げる話

VagrantまとめVagrantでローカル使い捨て環境が準備できる

設定ファイルをバージョン管理して配布すれば同じ仮想化環境を利用できる

Page 18: VagrantとChefで開発スピードを上げる話

Chef

Page 19: VagrantとChefで開発スピードを上げる話

Chefサーバ構成を管理するソフトウェア

Rubyの内部DSLで記述されたレシピと、各種属性情報なども含めたクックブックで構成が表現される

クックブックを適用することで構成が定められた状態となる(冪等性の保証)

サーバ上のあらゆるリソースをクックブックで表現

パッケージ,サービス,設定ファイル,cron設定, ...

Page 20: VagrantとChefで開発スピードを上げる話

クラサバなChef

Page 21: VagrantとChefで開発スピードを上げる話

Chef-soloとKnife-soloローカルではクラサバなChefはオーバースペック

単一サーバでクックブックを適用するChef-solo

リモートでChef-soloを実行するKnife-soloが便利

Knife-solo自体はChefのプラグイン

VagrantゲストOSの構成管理はホストOSからKnife-soloを使うのがオススメ

Page 22: VagrantとChefで開発スピードを上げる話

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

Page 23: VagrantとChefで開発スピードを上げる話

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

Page 24: VagrantとChefで開発スピードを上げる話

まとめ

Page 25: VagrantとChefで開発スピードを上げる話

最初に提示した問題サーバ環境/構成に関して、

トレーサビリティが低い

メンテナンスビリティが悪い

ポータビリティが低い

使い捨てできるアドホックな環境がない

Page 26: VagrantとChefで開発スピードを上げる話

最初に提示した問題トレーサビリティとメンテナンスビリティ

Chefクックブックがバージョン管理されれば解決

ポータビリティとアドホック環境

ローカルはVagrant+Chefで、本番環境もChefで構築するポリシーとすれば解決

Page 27: VagrantとChefで開発スピードを上げる話

Chefクックブックは誰が書いていく?

アプリケーションエンジニア、インフラエンジニア両方で書いくべき(提案)

クックブックのテストはローカルVagrant環境で

クックブックはバージョン管理して共有すべき