最近は開発環境にVagrantを使っている方が多くなっています。Windowsはもちろん、Mac OSXでもサーバと同じ環境を作るのは大変ですが、Vagrantを使えば1台構成ながらもLinuxディストリビューションが動作する環境を構築できます。

しかしローカルで開発して、それをサーバにデプロイするというのは面倒な作業です。最近ではそのための仕組みも充実してきましたが、FTPでアップロードするくらいの感覚でVagrant + さくらのクラウドを組み合わせてくれるのがVagrant Sakura Providerになります。

必要なもの

Vagrant Sakura Providerのインストール

Vagrantプラグインとしてインストールをします。コマンド一つで簡単にできます。

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

なお、必須ライブラリのnokogiriのバージョンが合わなくてインストールに失敗する場合があります。その場合は次のように指定することでインストールできるようになります。

# 予め [sudo] gem install nokogiri -v '1.6.6.2' を実行しておきます。
$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-sakura

Vagrantfileの用意

プロジェクトのフォルダを作成し、Vagrantの設定ファイルVagrantfileを下記のように作成します。

$ cat Vagrantfile 
Vagrant.configure("2") do |config|
  config.vm.box = "dummy"
  config.ssh.username = "ubuntu"

  config.vm.provider :sakura do |sakura|
    sakura.access_token = 'AAAAAAAAAAAAAAAAAAAAAAAA'
    sakura.access_token_secret = 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
    sakura.use_insecure_key = true
  end
end

アクセストークンおよびシークレットはさくらのクラウドの管理画面より取得してください。

APIキーメニュー
APIキーメニュー

そしてダミーの仮想マシンボックスを追加します。

$ vagrant box add dummy https://github.com/tsahara/vagrant-sakura/raw/master/dummy.box

これで準備完了です。

Vagrant Sakura Providerの実行

では実際に使ってみます。デフォルトではプロジェクトのフォルダが /vagrant に展開されます。なので例えばwwwというディレクトリを作成した場合は、 /vagrant/www と解釈されます。

wwwディレクトリを作成したら、

$ vagrant up --provider=sakura

を実行します。

$ vagrant up --provider=sakura
Bringing machine 'default' up with 'sakura' provider...
==> default: Creating a server with the following settings...
==> default:  -- Server Name: default
==> default:  -- Server Plan: 1001
==> default:  -- Disk Plan: 4
==> default:  -- Disk Source Archive: 112500459149
==> default: Disk 112600997552 is migrating (0/20480)
  :
==> default: Disk 112600997552 is migrating (20224/20480)
==> default: Waiting for SSH to become available...
==> default: Server is booted and ready for use!
TLD but no host_name given. No patterns will be configured.
vagrant-dns: trying to stop process with pid 33825...
vagrant-dns: process with pid 33825 successfully stopped.
==> default: Restarted DNS Service
==> default: Rsyncing folder: /path_to_vagrant/ => /vagrant

このようにさくらのクラウド上にサーバが展開されます。デフォルトは Ubuntu 12.04.2LTS-server 64bit となっています。Ubuntuはデフォルトユーザがubuntuになりますので、 config.ssh.username = "ubuntu" にてSSHログインする際のユーザ名を指定します。

立ち上がったサーバにログインする場合はいつものVagrantと同じく vagrant ssh でできます。

$ vagrant ssh
Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic x86_64)

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

  System information as of Fri Dec 19 09:43:07 JST 2014

  System load:  0.14              Processes:           75
  Usage of /:   5.2% of 17.73GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 153.120.17.86
  Swap usage:   0%

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

50 packages can be updated.
15 updates are security updates.

New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

$ ls /vagrant
www

といった具合にプロジェクトのディレクトリ以下が自動的に同期されます。

さらにファイルを編集したら、provisionコマンドで同期できます。

$ vagrant provision
==> default: Rsyncing folder: /path_to_vagrant => /vagrant

サーバのOSやCPU/メモリの組み合わせは sakura-list-id コマンドで取得できますので、数字を設定ファイルに書き込むだけです。

$ vagrant sakura-list-id
Zone: is1a

---- Archives ----
ID              Size  Name
112600898109    20GB  CentOS 5.11 64bit (基本セット)
112600915795    20GB  CentOS 6.6 64bit (基本セット)
  :
112600051011   100GB  Windows Server 2008 R2 for RDS
112600051958   100GB  Windows Server 2008 R2 for RDS(MS Office付)

---- Server Plans ----
ID      Name                                                                  
1001    プラン/1Core-1GB
2001    プラン/1Core-2GB
  :
96012   プラン/12Core-96GB
128012  プラン/12Core-128GB

Chefも使えます

Vagrantなので、Chefなどのprovisionerを使うこともできます。なおサーバ上でChefを使う際には vagrant-omnibus を使ってサーバ上にChefをインストールする必要があるようです。

ネットワークには非対応

config.vm.network を使ったネットワーク設定には未対応となっていますのでご注意ください。


開発時にはローカルの仮想マシン、運用時はさくらのクラウドと切り替えて使うのにとても便利そうです。複数台をまとめて管理したり、CIのような自動化は難しいかも知れませんが、ちょっとしたWebサービスを素早く開発、デプロイするのにはぴったりではないでしょうか。

tsahara/vagrant-sakura