💻

Vagrantで複数台の仮想サーバーを柔軟に起動できるVagrantfileの書き方

2021/12/06に公開

こんにちは、はじめての記事投稿となります。

Vagrantは、Vagrantfileを定義することで複数台の仮想サーバーを起動して、インフラの勉強をしたりテストをしたりできます。その際、実施したい内容によって起動する仮想サーバーの台数を変えたいことがあります。でも、そのためにはいちいちVagrantfileを書き変える必要があって面倒です。

この記事では、起動したい仮想サーバーの台数を柔軟に変更できるVagrantfileの書き方について説明していきます。

前提

この記事の内容は、次の環境で動作を確認しています。

  • MacBook Air(13-inch, 2017)
  • macOS 11.6
  • Vagrant 2.2.18
  • VirtualBox 6.1.28

また、VagrantやVirtualBoxのインストールについては、次の記事が参考になります。

https://qiita.com/tsunemiso/items/d184366b8926bd5a8d00
https://qiita.com/OPySPGcLYpJE0Tc/items/3268aa09c16a25cded0f

Vagrantfileに複数台の仮想マシンを定義する書き方

他のブログなどで紹介されている書き方だと、次のようになります。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "centos/7"

  config.vm.define "host1" do |host|
    host.vm.hostname = "host1"
    host.vm.network "private_network", ip: "192.168.56.11"
  end

  config.vm.define "host2" do |host|
    host.vm.hostname = "host2"
    host.vm.network "private_network", ip: "192.168.56.12"
  end

end

これだと起動したい仮想サーバーの台数を変更するには、config.vm.difine "hostX" doendの一連の定義を追記したり、削除する必要があって面倒です。

起動したい仮想サーバーの台数を柔軟に変更できる書き方

起動したい仮想サーバーの台数を環境変数にすることと、一連の定義をループ処理とすることで対応します。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "centos/7"

  MAX_OF_SERVERS = (ENV["MAX_OF_SERVERS"] || 1).to_i
  (1..MAX_OF_SERVERS).each do |id|
    config.vm.define "host#{id}" do |host|
      host.vm.hostname = "host#{id}"
      host.vm.network "private_network", ip: "192.168.56.#{10+id}"
    end
  end

end

実際に環境変数「MAX_OF_SERVERS」を「10」台に設定して仮想サーバーを起動するには、次のようにします。

$ export MAX_OF_SERVERS=10

$ time vagrant up
Bringing machine 'host1' up with 'virtualbox' provider...
Bringing machine 'host2' up with 'virtualbox' provider...
Bringing machine 'host3' up with 'virtualbox' provider...
Bringing machine 'host4' up with 'virtualbox' provider...
Bringing machine 'host5' up with 'virtualbox' provider...
Bringing machine 'host6' up with 'virtualbox' provider...
Bringing machine 'host7' up with 'virtualbox' provider...
Bringing machine 'host8' up with 'virtualbox' provider...
Bringing machine 'host9' up with 'virtualbox' provider...
Bringing machine 'host10' up with 'virtualbox' provider...

中略

real	7m44.957s
user	1m3.005s
sys	0m53.508s
$ vagrant status
Current machine states:

host1                     running (virtualbox)
host2                     running (virtualbox)
host3                     running (virtualbox)
host4                     running (virtualbox)
host5                     running (virtualbox)
host6                     running (virtualbox)
host7                     running (virtualbox)
host8                     running (virtualbox)
host9                     running (virtualbox)
host10                    running (virtualbox)

わたしの環境では、8分弱で10台の仮想サーバーを起動できました。なお、デフォルト(1台)の定義にもどすには、環境変数をリセットすることでもどせます。

$ vagrant destroy -f

$ unset MAX_OF_SERVERS

$ vagrant status
Current machine states:

host1                     not created (virtualbox)

まとめ

環境変数を利用して、Vagrantで起動したい仮想サーバーの台数を柔軟に変更できるVagrantfileの書き方を紹介しました。インフラの勉強やテストを少しでも効率よく実施できる一助になれば幸いです。

GitHubで編集を提案

Discussion