Carpe Diem

備忘録。https://github.com/jun06t

Vagrant で複数VMを一度に立ち上げる

概要

ロードバランサの検証だったりレプリケーションの検証をするときに複数VMを立ち上げる必要がありますが、それぞれ別々に作って起動するのは面倒ですよね。
Vagrant だと設定ファイルを編集すれば一度にできてしまうのでご紹介します。

環境

複数起動するための最低限の設定例

Vagrantfile を編集します。 最後の方に各VM毎の設定を追記します。

Vagrant.configure(2) do |config|

# 色々コメントたくさん〜

  config.vm.define :web1 do |web|
  end

  config.vm.define :web2 do |web|
  end
end

この状態で

$ vagrant up

すると複数VMを起動してくれます。

ネットワークを設定した例

先ほどの設定だとNICが共有されちゃってるのでもう1つNICを追加します。

Vagrant.configure(2) do |config|

# 色々コメントたくさん〜

  config.vm.define :web1 do |web|
    web.vm.network :private_network, ip: "192.168.33.10"
  end

  config.vm.define :web2 do |web|
    web.vm.network :private_network, ip: "192.168.33.11"
  end
end

これで起動すればそれぞれ異なるIPを持った状態で起動できます。 また内部ネットワークを構築しているのでVM同士の疎通もできます。

ポートフォワーディングの設定をした例

Vagrant.configure(2) do |config|

# 色々コメントたくさん〜

  config.vm.define :web1 do |web|
    web.vm.network :private_network, ip: "192.168.33.10"
    web.vm.network :forwarded_port, host: 8001, guest: 8000
  end

  config.vm.define :web2 do |web|
    web.vm.network :private_network, ip: "192.168.33.11"
    web.vm.network :forwarded_port, host: 8002, guest: 8000
  end
end

このように設定すれば

ホストPCの8001 -> web1の8000
ホストPCの8002 -> web2の8000

といった形で設定が可能になります。

メモリの設定をした例

Vagrant.configure(2) do |config|

# 色々コメントたくさん〜

  config.vm.define :web1 do |web|
    web.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
    end
  end

  config.vm.define :web2 do |web|
    web.vm.provider "virtualbox" do |vb|
      vb.memory = "2048"
    end
  end
end

これで1Gと2Gのメモリのマシンができました。

その他

注意として以前使った

$ vagrant ssh

はそのまま使えません。どちらに接続するかはっきりしないからですね。

$ vagrant ssh web1

といった感じで名前を指定するとSSH接続できます。もしくは以前のように

$ vagrant ssh-config >> ~/.ssh/config

として設定すれば

$ ssh web1

といったようにどのフォルダからでも接続できます。