Azure
vagrant

Vagrant と Azure で使い捨て開発環境をさくっと作る

More than 3 years have passed since last update.

Azure には コマンドラインツール が用意されていて、Vagrant 経由でなくても簡単にサーバを作って消してができる。けれども Vagrant を使うと chef とか ansible とかもろもろ使ってプロビジョニングまで一気通貫で出来るので、大変便利になる。


0. 準備


Azure のアカウントを作る

http://azure.microsoft.com/ からポチポチっと。


Vagrant をインストールする

http://www.vagrantup.com/downloads.html からダウンロードして、これまたポチポチっと。


azure-cli のインストール

これは無くても何とかなるんだけど、準備するのに便利なので入れておく。

インストール方法は http://qiita.com/zakkied/items/d94ff3845ee098a2c5e2 など。


1. vagrant-azure plugin をインストールする

% vagrant plugin install vagrant-azure

ソースコードからインストールするときはこんな感じ:

% git clone https://github.com/MSOpenTech/vagrant-azure.git

% cd vagrant-azure
% bundle install --path=vendor/bundle
% bundle exec rake build
% vagrant plugin install pkg/vagrant-azure-1.0.0.gem


2. Vagrantfile を作る

# vi: set ft=ruby :

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'azure'

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

config.vm.provider :azure do |provider, override|
provider.subscription_id = 'abcdefgh-1234-5678-9abc-d123456789ab'
provider.mgmt_certificate = '/Users/zakkie/azure-api/azure.pem'
provider.mgmt_endpoint = 'https://management.core.windows.net/'

# vm settings
provider.vm_image =
'b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-13_10-amd64-server-20140226-en-us-30GB'
provider.vm_location = 'Japan East'
provider.vm_size = 'Small'
provider.vm_name = 'zakkie-test014'
provider.cloud_service_name = 'zakkie-test014'
provider.ssh_private_key_file = '/Users/zakkie/.ssh/azure.key'
provider.ssh_certificate_file = '/Users/zakkie/.ssh/azure-cert.pem'

override.ssh.private_key_path = '/Users/zakkie/.ssh/azure.key'
override.vm.box = 'azure'
override.vm.box_url = 'https://github.com/msopentech/vagrant-azure/raw/master/dummy.box'
end
end

それぞれ必要なパラメータは azure コマンドから求めることができる:


subscription_id, mgmt_endpoint

% azure config list

info: Getting config settings
data: Setting Value
data: ------------ ------------------------------------
data: endpoint https://management.core.windows.net/
data: subscription abcdefgh-1234-5678-9abc-d123456789ab


mgmt_certificate

% azure account cert export -f azure.pem

で証明書ファイルが保存される。


vm_image

% azure vm image list

から選択。


vm_location

azure vm location list

から選択。


vm_size

これは取れないっぽい。help にあるのがそれっぽいかも。

% azure vm create -h

(snip)
help: extrasmall, small, medium, large, extralarge, a5, a6, a7

ただし、先頭を大文字にする必要がある。


vm_name, cloud_service_name

Azure内での VM の識別子 (vm_name) と DNS 名 (<cloud_service_name>.cloudapp.net)。同じである必要はないけど、揃えておいたほうが無難。


ssh_private_key_file, ssh_certificate_file, private_key_path

http://qiita.com/zakkied/items/d94ff3845ee098a2c5e2#1-2 のように鍵ファイルを作成。


さあ使ってみよう


起動

% vagrant up

Small, Japan West で 210 秒くらいかかった


SSH ログイン

% vagrant ssh


停止

% vagrant halt


VM 削除

停止しただけだと課金は継続するので、使い終わったら必ず削除する。

また、バグなのか、ストレージだけ残ることがあったので、WebUI からも念のため削除されたことを確認しておいたほうが良さそう。

% vagrant destroy


Ansible を使ったプロビジョニング

chef でもいいけど、Ansible の方が簡単なので。

Vagrantfile に provision を追加する。

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

config.vm.provision 'ansible' do |ansible|
ansible.playbook = "provisioning/playbook.yaml"
end

config.vm.provider :azure do |provider, override|
...


provisioning/playbook.yaml

- hosts: all

sudo: yes
tasks:
- command: /usr/bin/apt-get update
- command: /usr/bin/apt-get -y upgrade
- name: install basic packages
apt: pkg={{ item }} state=latest
with_items:
- git
- erlang
- nodejs
- npm

vagrant up --provision とすると playbook.yaml が VM の起動後に反映される。つまり VM を作り直しても、毎回同じ状態から使いはじめることができる。つまりつまり、構築した VM を削除しても、惜しくもなんともない。つまりつまりつまり、簡単に使い捨ての環境を構築できるようになった。

なお、VM が起動済みの場合は vagrant provision でよい。

(追記1)

ansible は vagrant を実行しているホストから実行するので、ansible をインストールしておく必要があった。

% pip install ansible

(追記2)

VM として windows を構築する 手順をまとめた。