このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

DigitalOcean + Vagrant の使い方への補足

1円クラウド・ホスティングDigitalOceanを、Vagrantから使ってみる」への補足。

シンガポール・リージョンで起こったこと

1円クラウド・ホスティングDigitalOceanを、Vagrantから使ってみる」の注釈で、次のように書きました。

ネットワーク通信ではサンフランシスコやシンガポールのほうが有利でしょうが、ドロップレットの生成ではニューヨークのほうが速いような気がします。

シンガポール・リージョン(Singapore 1)のドロップレット生成が長時間かかることがありました。問い合わせてみたら、次のような返事でした。

There is a currently a backlog on the scheduler which is why the requested events are taking longer than usual. Any other events that you issue will also be backlogged for the same reason.

Please try again in a few minutes.



現在、要求されたイベントはスケジューラーのバックログに積まれています。そのため、処理されるまで通常より長い時間がかかります。同様な事情で、その他のイベントもバックログに積まれるでしょう。

数分後に再度試みてください。

データセンターが混んでいてバックログに積まれると、「SSDでサクッと生成」の恩恵はなくなってしまいますね。

ボックスの管理

DigitalOceanの場合、Vagrantボックスはダミーです。しかし、ボックスは必要なのでVagrantfileに次のように記述しておきました。

  config.vm.box = "digital_ocean"
  config.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digi

これで問題なく動きますが、digital_oceanという名のボックスは、大域的に登録はされません。


$ vagrant box list
centos-6.4 (virtualbox)
centos6.3min (virtualbox)
ubuntu-raring (virtualbox)

$

vagrant box add コマンドで登録しておいたほうが管理上はいいと思います。digital_oceanボックスの存在を vagrant box list で確認できるようになるので。


$ vagrant box add digital_ocean "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"
Downloading box from URL: https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box
Extracting box...ate: 135/s, Estimated time remaining: --:--:--)
Successfully added box 'digital_ocean' with provider 'digital_ocean'!

$ vagrant box list
centos-6.4 (virtualbox)
centos6.3min (virtualbox)
digital_ocean (digital_ocean)
ubuntu-raring (virtualbox)

$

プロビジョニング用のシェルスクリプトの書き方

プロビジョニングの指定は次のように書きました。

  config.vm.provision "shell", path: "./provision.sh"

プロビジョニングに関係するファイルが増えると、とっちらかった印象になるので、そのときはサブディレクトリを作ったほうがいいでしょう。

  config.vm.provision "shell", path: "./provision/run.sh"

サブディレクトリ ./provision/ にプロビジョニングに関係するファイル群をまとめます。例えば、./provision/hello.txt というファイルを置いて、run.sh を次のようにします。

# This is provision/run.sh
cp ./hello.txt /tmp/

いやっ、これはうまく動かない。プロビジョニング用シェルスクリプトは、別な場所にコピーされて実行されるので、相対パス ./hello.txt は解釈が変わってしまって、エラーになります。


cp: cannot stat `./hello.txt': No such file or directory

Vagrantfileがある作業ディレクトリが、仮想マシン上のどのディレクトリにマウント(または同期)されるかを考慮する必要があります。例えば:

# This is provision/run.sh
export RUNTIME_PROV_DIR=/vagrant/provision

cp $RUNTIME_PROV_DIR/hello.txt /tmp/

プロビジョニングの本体部分を別なファイルにして、run.shからsource(または呼び出し)するのがよさそうです。

#!/bin/sh
# -*- coding: utf-8-unix -*- 
# This is provision/run.sh

export RUNTIME_PROV_DIR=/vagrant/provision

source $RUNTIME_PROV_DIR/main.sh
#!/bin/sh
# -*- coding: utf-8-unix -*- 
# This is provision/main.sh

cp $RUNTIME_PROV_DIR/hello.txt /tmp/

同様な仮想マシンをプロバイダーだけ変えて使う

次のVagrantfileは、同じOSをベースにして、同じホスト名とプロビジョニングスクリプトを持つ仮想マシンを、DigitalOcean(クラウドVPS)とVirtualBox(ローカル仮想マシン)により生成するものです。

# -*- coding: utf-8; mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.hostname = "centos64-x64-test"
  config.vm.provision "shell", path: "./provision/run.sh"

  config.vm.provider :digital_ocean do |dig_o, override|
    override.ssh.private_key_path = "~/.ssh/id_rsa"
    override.vm.box = "digital_ocean"
    override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"
    dig_o.client_id = ENV['DO_CLIENT_ID']
    dig_o.api_key = ENV['DO_API_KEY']
    dig_o.image = "CentOS 6.4 x64"
    dig_o.region = "San Francisco 1"
  end

  config.vm.provider :virtualbox do |vb, override|
    override.vm.box = "centos-6.4"
    override.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box"
    override.vm.network "private_network", ip: "192.168.99.5"
    override.vm.network "forwarded_port", guest: 80, host: 8080
    vb.gui = true
    vb.customize ["modifyvm", :id, "--memory", 1024]
  end

end

vagrant up の--providerオプションで、DigitalOceanかVirtualBoxかを指定します。


$ vagrant up --provider=digital_ocean
Bringing machine 'default' up with 'digital_ocean' provider...
[default] Using existing SSH key: Vagrant
[default] Creating a new droplet...
[default] Assigned IP address: 107.170.232.35
DL is deprecated, please use Fiddle
[default] Modifying sudoers file to remove tty requirement...
[default] Rsyncing folder: /cygdrive/C/Users/hiyama/Work/digitalOcean/pc2/ => /v
agrant...
[default] Running provisioner: shell...

... 省略 ...



$ vagrant up --provider=virtualbox
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'centos-6.4'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 80 => 8080 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
DL is deprecated, please use Fiddle
[default] Machine booted and ready!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
prevent things such as shared folders from working properly. If you see
shared folder errors, please make sure the guest additions within the
virtual machine match the version of VirtualBox you have installed on
your host and reload your VM.

Guest Additions Version: 4.2.16
VirtualBox Version: 4.3
[default] Setting hostname...
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
[default] Running provisioner: shell...

... 省略 ...