2017/07/11更新

[Vagrant] 複数の仮想サーバーを立ち上げて、それぞれのサーバーを連携させる

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
最近の案件の検証環境で、Vagrantで複数のインスタンスを立ち上げ、インスタンス間で通信する仕組みを作ったので、それをブログにも残しておきたいと思います。
画像


目次




今回やったこと

今回の案件の本番環境では、DBとアプリをそれぞれ別のサーバーに構築し、アプリからDBへ接続するという構成でした。それをローカルの検証環境でも実現したいとのことで、Vagrantを用いて実現した次第です。

具体的には、1つのVagrantfileに複数インスタンス起動の設定を記述して、仮想サーバーを起動します。今日はその具体的なやり方をブログに書く次第です。



Vagrantで複数インスタンスを同時に立ち上げる

Vagrant標準機能で、複数のインスタンスを立ち上げることができます。具体的には以下のように、Vagrantfileでconfig.vm.defineを指定することで、複数のインスタンスを立ち上げます。
# -*- mode: ruby -*-
# vi: set ft=ruby :

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

  # 利用するBoxはCentOS7を指定
  config.vm.box = "centos/7"

  # DBサーバーを指定します.
  config.vm.define :db do | db |

    # ホスト名
    db.vm.hostname = "db"

    # Vagrant上の仮想ネットワークのIPアドレス
    db.vm.network :private_network, ip: "192.168.33.20"

    # ポートフォワーディング(Vagrant外からもDBに接続できる設定)
    # auto_correct:trueにすることで、33306ポートが使用中の場合に、自動的に別のポートに割り当ててくれる.
    config.vm.network "forwarded_port", guest: 33306, host: 33306, auto_correct: true

    # Dockerを使いたかったので、Dockerをプリインストール.
    config.vm.provision "docker" do |d|
    end

  end

  # APPサーバーを指定します.
  config.vm.define :app do | app |

    # ホスト名
    app.vm.hostname = "app"

    # Vagrant上の仮想ネットワークのIPアドレス
    app.vm.network :private_network, ip: "192.168.33.10"

    # ポートフォワーディング(Vagrant外からAPPに接続できる設定)
    config.vm.network "forwarded_port", guest: 5000, host: 5000, auto_correct: true

    # Dockerを使いたかったので、Dockerをプリインストール.
    config.vm.provision "docker" do |d|
    end

  end

end
そして、以下のコマンドで起動できます。
$ vagrant up
起動したのちに、sshでログインするには、以下のようにコマンドを実行します。
# vagrant ssh [インスタンス名]

# アプリサーバーの場合
$ vagrant ssh app

# DBサーバーの場合
$ vagrant ssh db
上記のように、どのVMにログインするのかを引数で指定してsshでログインします。

そのほかに、VMを再起動する際にも、インスタンス名を指定することで、指定したVMのみ再起動することができます。
# vagrant reload [インスタンス名]

# アプリサーバーのみ再起動
$ vagrant reload app

# インスタンス名を指定しないと、全VMを再起動
$ vagrant reload
また、ローカルIPを指定しているので、そのIPアドレスを用いて、あるVMから別VMへ接続することができます。
# アプリサーバーにログイン
$ vagrant ssh app

# DBサーバーへ疎通確認
$ ping 192.168.33.20
PING 192.168.33.20 (192.168.33.20) 56(84) bytes of data.
64 bytes from 192.168.33.20: icmp_seq=1 ttl=64 time=0.472 ms
64 bytes from 192.168.33.20: icmp_seq=2 ttl=64 time=0.505 ms
64 bytes from 192.168.33.20: icmp_seq=3 ttl=64 time=0.416 ms
Vagrantを用いて複数サーバーを立ち上げ、それぞれを連携させるような検証が簡単にできるところは素敵ですね。今回も、それぞれのサーバーでDockerを動かして連携したいとのことで、本番構築前にVagrantで色々と実験を行なっていました。



参考資料

以下のドキュメントなどを参考にしました、ありがとうございます。

Vagrant Documentation(公式、英語)



最後に

Vagrantはここ2年ほど触っていませんでしたが、久しぶりに使うとやっぱり便利ですね。Dockerのプリインストールもできるあたりは素敵です。今後も機会があれば触っていけたらと思います。

最後になりますが本ブログでは、Linux・インフラ・開発環境・Python・フロントエンド・Go言語・Node.js・Swift・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。