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|
...
- 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 を構築する 手順をまとめた。