身近な人にDevOpsの最初の一歩を解説するために、Vagrantというツールの紹介と使い方をまとめてみた。
Vagrant(ベイグラント)とは
仮想マシン環境を簡単に構築・管理・配布できるツール。どのくらい簡単かというと、例えばUbuntu 12.04 server 32bitの仮想マシンを準備するのであれば、Vagrantをインストール後は下記の3行で済む。
$ vagrant box add base http://files.vagrantup.com/precise32.box
$ vagrant init
$ vagrant up
コマンドを実行後、しばらくすると、仮想マシンが立ち上がる。コンソールにログインするには、下記のコマンドを実行する。
$ vagrant ssh
vagrantというユーザーでログインされる。このユーザーはsudoersに追加されているので、sudoコマンドでroot権限で様々なコマンドが実行可能だ。
ここで登場したコマンドを簡単に説明すると、
$ vagrant box add base http://files.vagrantup.com/precise32.box
→ http://files.vagrantup.com/precise32.box というbox(仮想マシンのベース)をダウンロードし、baseという名前で追加する。
$ vagrant init
→ Vagrantの設定ファイル(Vagrantfile)を生成する。
$ vagrant up
→ Vagrantfileを元に仮想マシンを起動する。
$ vagrant ssh
→ 立ち上げた仮想マシンにSSHでログインする。
Vagrantを使った仮想マシンの構築
Vagrantは、このboxをベースにして、各種環境をインストールしたり、設定ファイルを追加したりできる。この操作をProvisioningと呼んでいる。
Provisioningに利用できるのは、以前はChef Soloのみだったが、今ではシェルスクリプト等もサポートしている。vagrant up
時にはデフォルトで実行されるし、仮想マシンが起動中も下記のコマンドを実行すれば、構築スクリプトが実行される。
$ vagrant provision
Chefなどの環境構築ツールを利用すれば、「既にインストールされている場合はスキップ」みたいな事も自動でしてくれるので便利。(ただ、今回はVagrantの紹介なので、Chefについては割愛。)
VagrantもChefもRubyベースのDSLで環境を構築するので、スクリプトがあれば手順書要らずで環境を複製できる。
Vagrantの仮想環境を別の環境にデプロイする
VagrantはデフォルトではVirtualBoxベースの仮想マシンを作成する。VagrantはVMWareにも対応しているし、更にAWS EC2にデプロイすることもできる。ローカルで開発した環境を元に、EC2の構築までできる。この機構はプラグインになっている。例えばEC2にデプロイするのであれば、
$ vagrant plugin install vagrant-aws
というように、プラグインをインストールし、Vagrantfileに設定を記述する。もちろん、EC2以外のクラウドベンダーのプラグインもある。例えば「さくらのクラウド」であれば、
$ vagrant plugin install vagrant-sakura
$5/月でSSDストレージが使える事で有名なdigitaloceanにデプロイするのであれば、
$ vagrant plugin install vagrant-digitalocean
と言ったものがある。
(Vagrantfileに記述する内容や、providerの指定方法は、それぞれのプラグインのドキュメントに書いてあるので、こちらはとりあえず割愛。)
Vagrantを使ったデスクトップ環境の構築
GUIが必要な場合でも、Vagrantfileの設定を修正するだけで対応できる。下記はVirtualBoxの例
config.vm.provider "virtualbox" do |v|
v.gui = true
end
もちろん、boxにはデスクトップ環境のパッケージが入っていないとGUIが立ち上がっても嬉しさ半減。boxの共有しているページもあるが、セキュリティ等が気になる人はveeweeを使ってboxを作ろう。Veeweeの使い方
仮想マシンのネットワークの設定の辺りにハマる事があるが、Vagrantは便利なので、使い方を知っておこう。