Vagrant
- 2. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
1
自己紹介
• 外山 寛
– 株式会社イプロス
– チーフエンジニア
• Github
– @toyama0919
– https://github.com/toyama0919/
• Twitter
– @god_tongue_19
- 3. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
2
vagrant provison1
vagrant package2
3
Vagrant 1.34
まとめ5
vagrant plugin
- 4. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
3
VAGRANTの最大
の長所は?
- 5. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
4
インフラの
コード化!
(Infrastructure As Code)
- 6. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
5
インフラのコード化?
Vagrantfileはテキストファイル!
テキストファイルであるということは履歴を管理
できるということ。
Virtual BOXやVM Wareはイメージ
バイナリファイルだと履歴が管理できない。
便利ではあるが変更内容を共有できない。
本番では動いているが自分の環境では動かないと
かはよくある話。
- 7. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
6
本質的でない作業に
時間を使わない。
- 8. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
7
プロビジョン
(provision)
- 9. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
8
プロビジョン(provision)とは?
仮想マシンを起動した際に実行される
一連の処理。
サブコマンドのprovision ,up ,reloadを
実行した時に発動する。※1
※1 vagrant 1.3で仕様変更!
- 10. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
9
プロビジョン(provision)の利点
ミドルウェアのインストールやサービ
スの起動、停止などを自動化できる。
構築する仮想マシンがVirtualBoxでも
EC2でも同じスクリプト、Cookbookが
使える。
何回実行しても同じ結果になる。
→冪等性(べきとうせい)
- 11. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
10
プロビジョン(provision)
ChefやChef-Solo
Vagrantfileの中でcookbookのパスや適用したいレ
シピを指定する。
Shell
Shellは外部ファイルではなくインラインで記述す
ることも可能。※後述
Puppet
CFEngine
- 12. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
11
# Vagrantfileにコマンドを直接記述
config.vm.provision :shell, :inline => "echo
foo > /vagrant/test”
# 実行する外部Shellを指定
config.vm.provision :shell, :path =>
"script/setup.sh"
Shellによるプロビジョン
- 13. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
12
# 以下のいずれかでプロビジョンされる。
vagrant {up,reload,provision}
# shellのみでプロビジョン
vagrant up --provision-with shell
Shellによるプロビジョン2
- 14. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
13
chefとは?
サーバOSでのインストール・設定・各
サービスの状態管理等、諸々のシステ
ム構築や運用作業を自動化できる
Ruby製。
オープンソースとして公開されている
。
ミドルウェアの状態を「Cookbook」と
して管理する。
- 15. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
14
# chef-soloを仮想マシン上で実行
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = [ "cookbooks", "site-cookbooks" ]
chef.run_list = [
"recipe[mysql55]",
"recipe[java]"
]
end
# これでもよい。
chef.add_recipe("java")
chef.add_recipe(”mysql55")
chefによるプロビジョン
- 16. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
15
Vagrant 本番環境Chef
理想形はこんな感じ
- 17. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
16
POVIDER
(プロバイダー)
- 18. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
17
プロバイダー(provider)とは?
仮想マシンを作るエンジンの部分。
仮想マシンの種別、と覚えれば良い。
例を挙げると以下のとおり
VirtualBox
AWS
VMware Fusion
KVM
- 19. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
18
プラグイン
- 20. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
19
プラグイン
Vagrantのコマンドを拡張できる。
providerやvagrant内部もプラグインで
出来ている。
現在のvagrantのバージョンは1.2系だ
が古いバージョンとプラグインの互換
性がないこともあるので注意。
特に1.0と1.1以上では大きく仕様が変
更されており、Vagrantfileの記述方法
自体も変わっている。
- 21. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
20
どんなプラグインがある?
aws
sahara
veewee
berkshelf
vagrant-vbguest
vagrant-omnibus
Etc…
- 22. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
21
vagrant-aws plugin
Vagrantでaws上にEC2インスタンスを
作成できる。
VPCに対応している。
最近ElasticIPに対応した。
リージョン、アベイラビリティゾーン
、セキュリティグループ、タグ、イン
スタンスタイプなど細かな指定が可能
。
- 23. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
22
vagrant-aws plugin
Internal AWS
EC2
vagrant up
- 24. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
23
vagrant up
だけで
EC2インスタンス
を生成!
- 25. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
24
config.vm.provider :aws do |aws, override|
aws.access_key_id = "YOUR KEY"
aws.secret_access_key = "YOUR SECRET KEY"
aws.keypair_name = "KEYPAIR NAME”
aws.instance_type = "t1.micro”
aws.region = "ap-northeast-1”
aws.security_groups = [ 'quick-start-1' ]
aws.ami = "ami-XXXXXXXXX”
override.ssh.username = ”ec2-user"
override.ssh.private_key_path = "PATH"
end
vagrant-aws plugin の設定例
- 26. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
25
# プラグインをインストール
$ vagrant plugin install vagrant-aws
# EC2インスタンスを起動
$ vagrant up –provider=aws
# EC2インスタンスをTerminate ※1
$ vagrant destroy
※1 stop instanceはない様子。。。
vagrant-aws plugin の設定例
- 27. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
26
Amazon Linuxの注意点
Amazon Linuxをローカル環境に構築す
ることは基本できない。
ChefのCookbookがAmazon Linuxに対
応していないことがたまにあり、自分
の環境と同じプロビジョニングをする
ためにamazon用の対応が必要な場合が
ある。
Shell Scriptは基本同じものが使える。
- 28. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
27
sahara plugin
仮想マシンを簡単にロールバックでき
るプラグイン。
Vagrantのプラグインといえばこれ、と
いうぐらい有名。
残念ながらVirtualBoxのみ対応。
- 29. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
28
# sandboxモードに入る
$ vagrant sandbox on
# 何か作業
$ ~
# 巻き戻す
$ vagrant sandbox rollback
# 確定する。(rollbackしたらここに戻る)
$ vagrant sandbox commit
sahara plugin
- 30. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
29
sahara plugin
sandbox off コミットしていなければも
とに戻せる。
残念ながらVirtualBoxのみ対応。
- 31. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
30
自分のBOXを
他人に公開したい。
- 32. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
31
PACKAGE
(パッケージ)
- 33. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
32
パッケージング(package)
自分で修正した仮想マシンを共有でき
る。
拡張子が.boxで保存する。
VagrantfileでBOXのロケーションを指
定できる。
作成するBOXはvagrantで使用されるの
が前提なので、vagrantユーザーがいな
ければいけない。
- 34. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
33
# 作業ディレクトリにVagrantfile
# package.boxが作成される
$ vagrant package
# 作ったBOXを自分のマシンに追加
$ vagrant box add my_box package.box
# BOXをs3にアップロードして共有
$ s3cmd put package.box s3://BUCKET[/PREFIX]
packageの使い方
- 35. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
34
イプロスでの使用例
Internal S3
BASE
BOX
- 36. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
35
config.vm.box = ”my_box"
# 作成したBOXをs3にアップロードしておき、
# そのURLを指定する。(httpでなくても可)
config.vm.box_url =
"http://hoge.s3.amazonaws.com/develop/dev.box"
Vagrantfileの設定例
vagraut up
だけでダウンロードが開始され、仮
想マシンがローカルに展開される
- 37. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
36
パッケージングの使い道としては
自分で作ったボックスをS3にアップロ
ードし、各自がvagrant経由でローカル
にマシンを展開する。
ローカルにBOXが存在すれば2度目以
降はマシンをダウンロードしない。
最低限の部分はBOX化する、で良いが
ミドルウェアやアプリをインストール
していく部分はprovisioningで管理して
いくことが望ましい。
- 38. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
37
パッケージングの注意点
BOXの場所はインターネットにつなが
る場所なら可能なので、認証情報を
BOXに入れてしまう場合は注意が必要
。(リポジトリのパスワードとか)
開発で使う場合はS3にBOXを置くケー
スが多いと思うので、Bucket Policyな
どで縛るとよい。
- 39. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
38
開発が活発なので
仕様が大きく変わる。
- 40. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
39
Vagrant1.3がリリース、変更点は
vagrant upで初回のみプロビジョニン
グが実行される。
2回目以降は明示的に—provisionとしな
いとプロビジョニングされない。
vagrant reloadも同様。
Mac OS Xのguestが対応したらしい。
後はファイルの構成とか細かい話。
- 41. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
40
まとめ
USE
VAGRANT
- 42. COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【CONFIDENTIAL】
Vagrant
41
ご静聴ありがとう
ございました。