Vagrant:Tech Basics/Keyword
仮想環境を管理するためのツール「Vagrant」。利用する仮想化ソフトウェアに関係なく、どの環境でも同じように仮想マシンを管理できる。
「Vagrant」(ベイグラント)は、米HashiCorp社が開発した、仮想環境の構築/展開用の管理ツールである。使用する仮想化ソフトウェアやOSプラットフォームに関わらず、どの環境でも同じように仮想マシン環境を構築・展開したり、管理したりできる。実験や開発用の環境準備から、本番用サーバの展開まで、幅広く利用できる。
仮想化プラットフォームを管理するVagrant
ソフトウェアの開発や運用などにおいて、仮想マシンを使うことは少なくない。OSプラットフォームやソフトウェアのバージョンの違いなどに対応するため、さまざまなOSやアプリケーションなどを組み込んだ仮想環境を多数用意したり、クラウドサービスを使ってWebサービスを構築したりすることが多いからだ。
だが仮想化プラットフォームは何種類もあるし、ぞれぞれ操作方法が異なっていて習得は容易ではない。
また仮想マシンを作成する場合は、仮想マシンの作成とディスクやネットワークの設定変更、OSのインストール、パッケージの追加、カスタマイズなど、決まり切っていても面倒な処理を繰り返す必要がある。複数台の仮想マシンがある場合は、それぞれに同じ設定を、抜けや漏れなく適用しなければならない。
このような処理を簡単に、そして常に同じように実行できるようにするのがVagrantである。仮想マシンの設定から起動や終了などの管理まで、どのOS/仮想プラットフォームでも同じように操作できるようにしている。
仮想環境プラットフォームを管理するVagrant
VirtualBoxやVMware、Hyper-V、KVM、Parallels、……など、さまざまな仮想化プラットフォームを簡単に、統一的に扱えるようにするVagrant。どの仮想環境でも同じコマンドで管理できるようになる。仮想マシンのイメージは「Vagrant box」(後述)としてパッケージ化されており、Vagrantfile設定ファイルの内容に基づいて展開される。これにより、同じ設定の仮想マシンをいつでもすぐに展開できる。boxはインターネットなどでも多く配布されている。
Vagrantfileによる仮想マシンのカスタマイズ
Vagrantでは、仮想マシンに対して適用すべき設定を「Vagrantfile」というファイルに記述しておき、それをあらかじめ用意されているベースOSイメージに適用させる、という方法でカスタマイズを行う。ちょうど「Docker」が「Dockerfile」というスクリプトファイルで実行イメージをカスタマイズするのと同じである。
これにより、いつでも同じ設定の仮想マシンを簡単に起動できるようになっている。また、起動後に特定のシェルスクリプトなどを起動してカスタマイズする「プロビジョニング」機能も利用できる。
さらに、1つのVagrantfileで複数の仮想マシンを起動することもできる。これにより、例えばほぼ共通の設定を持つ複数の仮想マシン群を素早く展開できる。
Vagrantの対応プラットフォーム
Vagrantは一種のラッパーソフトウェアであり、内部的には、各仮想化ソフトウェアが持っている管理用APIなどを呼び出して処理を行っている。そのカバー範囲は広く、元々対応していたVirtualBoxの他、現在ではVMware、Hyper-V、Parallels、KVM、libvirt(汎用の仮想化管理用API)、AWSなど、さまざまなプラットフォームに対応している(VMware向けなど、一部のものは有償)。
また、Dockerのコンテナーを使ったプロビジョニングにも対応している(ベースOSがLinuxでない場合はDocker実行用のコンテナーOSを稼働させ、その上へDockerコンテナーをロードする)。
Vagrant用の「box」パッケージ
Vagrantでは、仮想マシンで利用するOSのディスクイメージやその設定ファイル(必要な仮想マシンのハードウェア構成やネットワークなどの設定情報)などをまとめて、「box」というパッケージで管理している。
boxは自分で作成することもできる一方で、標準的なOSならばすでに作成されて公開されていることが多いので(Linuxの各ディストリビューションでは多く用意されている)、それをダウンロードして利用すると簡単である。
Vagrant boxを公開しているサイトとしては、有名なvagrantbox.esの他にも多数ある。またHashiCorp自身もVagrant boxを共有したり、運用管理などを補佐したりサービス「Atlas」(旧Vagrant Cloud)を運営している。
Vagrantによる仮想マシンの管理
Vagrantでは、「vagrant 〜」というCUIのコマンドを使って管理する。最初に「vagrant box add 〜」コマンドで、起動したいOSイメージが含まれたboxを入手する。boxファイルはHashiCorpや先の配布サイトなどから入手してもよいし、自分で作成したboxファイルでもよい。
次に、「vagrant init 〜」でVagrantの実行環境の準備とVagrantfileファイルの作成を行う。このファイルには、仮想マシンの名前やハードウェア/ネットワークの設定、追加するパッケージの情報などが書き込まれているので、必要に応じてカスタマイズする。
Vagrantfileを用意できたら「vagrant up」を実行するだけで、仮想マシンの作成や登録と、その起動が自動的に行われる。
仮想マシンの管理には、「vagrant suspend(一時停止)」「vagrant resume(復帰)」「vagrant halt(停止)」「vagrant status(状態確認)」などのコマンドを使う。実行中の仮想マシンへは、sshで接続するか、自動的に作成されている共有フォルダなどを通じて通信したり、データをやりとりしたりする。
利用が終了した仮想マシンは「vagrant destroy」で削除できる。boxイメージそのものを削除するには「vagrant box remove 〜」を利用する
「vagrant package」コマンドを使うと、現在の仮想マシンイメージをboxとして保存しておくことができる。後で同じ状態の仮想マシンを再構築したり、クラウド展開用のベースイメージなどとして利用できる。
以上のように、Vagrantを使うと、仮想マシンの準備や展開がプラットフォームを問わずに簡単にできるようになる。ただしVagrantは、仮想マシンの展開作業には向いているが、展開後のサーバの細かいカスタマイズはあまり得意ではない。そのような用途のためには、別のツール、例えばchefやPuppet、Ansibleなどの自動化ツールと組み合わせて使われることも多い。
■関連リンク
- Vagrant(HashiCorp)
- 「Vagrant開発者 Mitchell Hashimoto氏に聞いた:「Vagrant」って何ぞ?(・o・)」(Coding Edge)
- 用語解説「Windows/Linuxで使えるシステム構築・設定の自動化ツール Chef とは?」
- 連載「環境構築自動化の手順と評価検証、Puppetの基礎知識」(Linux & OSS)
Copyright© Digital Advantage Corp. All Rights Reserved.