1コマンドで作った。Vagrant + VPSで加速する開発環境作り | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

1コマンドで作った。Vagrant + VPSで加速する開発環境作り

最近の開発現場ではコードによる構成管理が注目されています。
Vagrant、Ansible、Docker等のTOOLの名称自体は知っているけど、
覚える事が沢山あるにも関わらず、役に立つ場面がイメージし辛く勉強が進まないという方も多いのでは無いでしょうか?

私は少し勉強しては挫折を繰り返し、
ようやく納得出来る開発環境をコード化することに成功しました。
同じように勉強しているが、何処から手を付けて良いか分からず苦戦している方の一助になれれば幸いです。

これから何回かに分けて Vagrant + Ansible + Docker を組み合わせて、
最終的にたった1コマンドで開発環境を作り上げてしまう事をゴールにプロジェクトを作成していきます。
(環境はLAMPサーバーにしようかと考えています)

今回は Vagrant に焦点を当て、
実際に Vagrant を使って ConoHa というサービスで VPS のインスタンスを作成するということをやっていきます。

何故コードによる構成管理をするのか

メリットは以下の3つです。

  • 誰でも同じ環境が構築できる
  • 定義ファイルがそのまま仕様書として使える
  • ただのテキストファイルなので、バージョン管理がしやすい

デメリットは作成者のコストです。
一から作り上げるには時間が掛かる上、上記のツールに対する知識が求められます。
手慣れた人であっても構成管理ツールを駆使して設定ファイルを編集しながら構築すると、2〜3倍の時間が掛かるかと思います。

スナップショットで管理してはどうか?

上記の一番上のメリットがコストほぼ0で受けられますので、短期的にはスナップショットの方が優れています。
しかし、OSの入った仮想環境を丸ごと管理する事になるので最大1GBのファイルのやり取りを覚悟することになります。

長期的にはコードにより中身が可視化された状態でバージョン管理しておくと、
どのような意図や目的でこの仮想環境を作成したのかまで透けて見えますので、
後からジョインしたメンバーに説明することや、自分が忘れた内容を思い出すことが格段に楽になります。

Vagrant とは

VagrantHashiCorp というサンフランシスコにある企業のTOOLです。
「vagrant up」というコマンドを打ち込むと、設定ファイルに従って全く同一の仮想マシンが今すぐ使える状態で出来上がります。

VirtualBOX や VMWare と比べてどう違う?

VirtualBOXVMWare は Windows、Mac、Linux などの様々なプラットフォームで動作する仮想マシンです。

対して Vagrant は単体で仮想マシンを動作させる仕組みを持ちません。
同じホストマシンにインストールされた VirtualBOX や VMWare を外側から操るラッパーなのです。

私が考える Vagrant を利用するメリットは、「コードによるインフラ構成管理」を実現する場合、
シンプルなVagrantfileと「vagrant up」の1コマンドで開発環境が作成出来る境地にたどり着く事が簡単だからと考えています。

例えばVirtualBOXのコマンド一覧では、エンジニアにとって必要ではないコマンドも沢山含まれています。
これらを駆使したシェルスクリプトを作成することはとても難しく、改良することも困難です。
更に VMWare や他の仮想環境で管理したい…というニーズが生まれた時に設定ファイルを全て書き直しになってしまうことでしょう。
そういった実装上の差異は全てVagrantfileとvagrantコマンドが吸収してくれますので、エンジニアは各仮想マシンTOOLの差異を気にする事なく使い分ける事が出来ます。

ローカルの仮想マシンにとどまらない!

なんと、仮想マシンっぽいものであればクラウドのサービスまで操れます。
AWSのEC2ConoHa等のライブラリを使ってインスタンスの状態をコントロールできます。
(これらのプラグインは有志の方が各サービスのAPIを利用するライブラリを作成・公開してくださっています)
下記のコマンドを見る限り、VirtualBOX 等のローカルで立ち上げた仮想マシンと同じように使える事がわかります。

  • vagrant up: インスタンスの作成、電源ON
  • vagrant ssh: インスタンスにSSH接続
  • vagrant halt: インスタンスの電源OFF
  • vagrant destroy: インスタンスの削除
  • vagrant provision: インスタンスとディレクトリを同期してプロビジョニングを実行

Vagrant は VirtualBOX と相性が良いのですが、
VirtualBOX との連携は簡単ですし、Qiitaの記事やドットインストール等でわかりやすく解説されています。
今回はこちらのQiitaの記事を元にConohaのプラグインを利用して仮想環境を立ち上げていきます。

ConoHa + Vagrant

こちらのQiitaの記事によると、v1.8.3ではインストール出来ない不具合があるようですが…
2016年9月現在では最新のVagrantのバージョンはv1.8.5でした。
インストールのテストも兼ねて試してみます。

$ vagrant -v
Vagrant 1.8.5

$ vagrant plugin install vagrant-conoha
Installing the 'vagrant-conoha' plugin. This can take a few minutes...
Installed the plugin 'vagrant-conoha (0.1.6)'!

ちゃんとインストールできましたね。
続いてVagrantfileを作成します。
「vagrant init conoha」で作れそうな気もしますが、ConoHa用の設定項目が含まれていないデフォルトのものが生成されてしまいますので、普通にエディタで開いて入力していきます。

$ cat Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box       = 'conoha'
  config.ssh.username = 'root'
  config.ssh.pty      = true

  config.vm.provider :conoha do |conoha|
    conoha.openstack_auth_url = 'https://identity.tyo1.conoha.io/v2.0'

    conoha.username           = 'gncu*******'
    conoha.password           = '***********'
    conoha.tenant_name        = 'gnct*******'

    conoha.flavor             = 'g-1gb'
    conoha.image              = 'vmi-ubuntu-14.04-amd64'
    conoha.region             = "tyo1"
    conoha.admin_pass         = "AdminPass123*"
    conoha.metadata           = {
      instance_name_tag: "vagrant_conoha"
    }
    conoha.security_groups    = [
      "default",
      "gncs-ipv4-all",
      "gncs-ipv6-all"
    ]
    # conoha.keypair_name       = "hironobu-key"

  end
  # config.ssh.private_key_path = "~/.ssh/id_rsa"
end

この内、下記の情報はConoHaの管理画面のAPIページから取得してきます。

conoha_console

  • conoha.tenant_name: テナント情報のテナント名
  • conoha.username: APIユーザーのユーザー名
  • conoha.password: APIユーザーのパスワード

では、実際に仮想マシンを立ち上げてみましょう。

$ vagrant status
Current machine states:

default                   not created (conoha)

The server is not created. Run `vagrant up` to create it.

$ vagrant up
Bringing machine 'default' up with 'conoha' provider...
==> default: Finding flavor for server...
==> default: Finding image for server...
==> default: Launching a server with the following settings...
==> default:  -- Tenant          : gnct********
==> default:  -- Name            : default
==> default:  -- Flavor          : g-1gb
==> default:  -- FlavorRef       : 7eea7469-0d85-4f82-8050-6ae742394681
==> default:  -- Image           : vmi-ubuntu-14.04-amd64
==> default:  -- ImageRef        : 793be3e1-3c33-4ab3-9779-f4098ea90eb5
==> default:  -- KeyPair         : ****
==> default: Waiting for the server to be built...

~~~ 中略 ~~~

==> default: Machine booted and ready!
==> default: Rsyncing folder: /Users/xxxx/test_run/ => /vagrant

$ vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.16.0-60-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Sep 12 01:42:29 JST 2016

  System load:  0.07              Processes:           98
  Usage of /:   3.2% of 48.11GB   Users logged in:     0
  Memory usage: 6%                IP address for eth0: 0.0.0.0
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

root@0.0.0.0:~# cd /vagrant

root@0.0.0.0:~# ls
Vagrantfile

ちゃんとVPSのインスタンスが立ち上がり、ログイン出来る事が確認できました。
また、/vagrantフォルダを覗くと、「Vagrantfile」と同じフォルダが共有されていることがわかります。
ただし、その際に Rsync over SSH を使用してフォルダの共有を実現していると思われますので、
Windows環境ではCygwin等を利用してRsyncやSSHをインストールする必要がありそうです。

まとめ

いかがでしたでしょうか?

Vagrant を使ってクラウドサービスの仮想マシンを簡単に立ち上げられました。
しかし、これではまだプレーンなUbuntuのサーバーを立ち上げただけです。

次回では更に、Ansibleを使ってコードでLAMP環境を作っていきます。
以上、「1コマンドで作った。Vagrant + VPSで加速する開発環境作り」でした。
最後まで読んでいただきありがとうございました。