Azure

15分でUbuntuのVagrant環境を作って、Azureにデプロイする

VagrantでAzureにもデプロイできるみたいなので、やってみました。
Vagrantを実行する環境もAzureに作って、この仮想マシンからAzureにデプロイしてみようと思います。

Vagrantについて、詳しく知りたい方はこちらのドキュメントをご覧ください。
■Vagrant日本語ドキュメント
http://lab.raqda.com/vagrant/index.html

また、VagrantのAzureのPlug-inは、こちらをご覧ください。
■MSOpenTech/vagrant-azure
https://github.com/MSOpenTech/vagrant-azure


今回の手順では、Azure上にUbuntu Server 14.04 LTSの仮想マシンを作成し、ここにVagrantを作成します。
なれてくれば、大体15~20分くらいで、デプロイができる環境ができます。

また、単純にデプロイをする環境でしたら、Azure CLIは不要なのですが、Vagrantfileを作成する上でCLIで確認することもあるので、今回の手順ではインストールする手順としています。

大きな流れは、下記の通りとなります。

1.Azure 仮想マシンに、Ubuntu Server 14.04LTSをインストールする。
2.Azure CLIのインストール
3.Vagrantのインストール
4.Vagrantfileの作成
5.実行と削除


1.Azure 仮想マシンに、Ubuntu Server 14.04LTSをインストールする。

Azure管理ポータルから、Ubuntu Server 14.04 LTSをインストールします。
他のバージョンでもいいのですが、自分はこのバージョンで検証しました。

この手順は、画面より単純にポチポチするだけなので、割愛します。

もし、ここで何かを気にするのでしたら、仮想マシンの料金くらいでしょう。
自分は、検証する際は、D1インスタンスを使うことが多いです。というのも、A2インスタンスとD1インスタンスなら、そんなに料金が変わらないからです。
CPUをすごく使うような場合は、A2の方が早いかもしれないですけど、ディスクIOであればD1のSSDのインスタンスを使った方が早いような気がしますね。

■仮想マシン(Linux)の料金
http://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/#Linux

2.Azure CLIのインストール

冒頭でも触れましたが、なくても大丈夫らしいです。
ですが、Vagrantfileを作る時には、あった方が便利です。

Azure CLIをインストールするためには、npmが必要ですので、まずはこちらをインストールします。
インストールするコマンドは、下記です。


sudo apt-get update
sudo apt-get install nodejs-legacy
sudo apt-get install npm

※ sudo apt-get updateをやっておかないと、npmのインストールでエラーがでました。

自分が検証した時にインストールされたバージョンは、下記の通りです。


$ node -v
v0.10.37
$ npm -v
1.4.28

続いて、下記コマンドを実行してAzure CLIのインストールします。


sudo npm install azure-cli --global

CLIをインストールした後は、Azureの管理用の接続設定を行います。

まずは、下記URLより管理証明書をダウンロードします。
http://go.microsoft.com/fwlink/?LinkId=254432

ダウンロード後は、Ubuntu Serverへ管理証明書をUploadし、下記のコマンドでインポートします。


azure account import hogehoge-mm-dd-yyyy-credentials.publishsettings

試しに、下記のコマンドを実行してみると、作業中のUbuntu Server が動いていてることが確認できます。


azure vm list

3.Vagrantのインストール

では、本題となるVagrantをインストールします。

「sudo apt-get install vagrant」でもインストールできるのですが、それでインストールできるバージョンが、1.4.0で、vagrant-azureのインストール要件が、Vagrant 1.6.0以上なのでそのままだと満たすことができなく、インストールエラーとなったので、下記の手順としました。


wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.2_x86_64.deb
sudo dpkg -i vagrant_1.7.2_x86_64.deb
vagrant plugin install vagrant-azure

インストール後に、vargrant –versionでバージョン確認を行うと、当然1.7.2と応答があります。

4.Vagrantfileの作成

自分の作成したVagrantfile(公開できる範囲で)は、下記になります。
ちなみに、作成したのは/home/azureuser/vagrant-test/になります。


ENV['VAGRANT_DEFAULT_PROVIDER'] = 'azure'

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

config.vm.provider :azure do |azure|
azure.subscription_id = '(サブスクリプションID)'
azure.mgmt_certificate = '/home/azureuser/vagrant-test/azure.pem'
azure.mgmt_endpoint = 'https://management.core.windows.net/'

# vm settings
azure.vm_image = 'b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu_DAILY_BUILD-trusty-14_04_2_LTS-amd64-server-20150416.2-en-us-30GB'
azure.vm_location = 'Japan East'
azure.vm_size = 'Small'
azure.vm_name = 'y0demovg01'
azure.cloud_service_name = 'y0demovg01'
azure.ssh_private_key_file = '/home/azureuser/.ssh/azure.key'
azure.ssh_certificate_file = '/home/azureuser/.ssh/azure-cert.pem'
end

config.ssh.private_key_path = '/home/azureuser/.ssh/azure.key'
config.vm.box = 'azure'
config.vm.box_url = 'https://github.com/msopentech/vagrant-azure/raw/master/dummy.box'
end

設定内容は、下記のような感じで取得してください。

(1).subscription_idの設定

サブスクリプションIDの設定です。
下記のコマンドで取得した、サブスクリプションIDを設定します。


azure account list

下記のような応答がありますので、サブスクリプションIDの箇所をVagrantに設定してください。


info: Executing command account list
data: Name Id Current
data: -------- ------------------------------------ -------
data: (名前) (サブスクリプションID) true
info: account list command OK

(2).mgmt_certificateの設定

Azureに仮想マシンを作成するために必要な管理証明書の設定です。
VagrantFileと同じフォルダに、下記のコマンドを実行して、「azure.pem」を作成しました。


azure account cert export -f azure.pem

(3).vm_image

Azureの仮想マシンを作成する際のイメージの設定です。
下記のコマンドを使って、イメージの名称を選択しました。
※ 量が多いので、UbuntuでGrep


azure vm image list | grep Ubuntu

ついでの、デプロイ先のデータセンターの名称は、下記のコマンドで取得できます。


azure vm location list

(4).ssh_private_key_fileとssh_certificate_fileの設定

Vagrantで作成する仮想マシンもUbuntuにしましたので、接続用のSSHの設定です。
下記のコマンドで作成します。
※ 途中で、ユーザ応答が必要ですが、そこは省略してますが、割と適当で大丈夫そうです。


cd /home/azureuser/.ssh
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout azure.key -out azure-cert.pem
※ 上記のコマンド実行後、色々応答を求められます。
chmod 600 azure.key
cat >> ~/.ssh/config <<EOB
Host *.cloudapp.net
User azureuser
IdentityFile $HOME/.ssh/azure.key
EOB

5..実行と削除

実行


vagrant up

SSHで接続


vagrant ssh

削除


vagrant destroy

 

まとめ

Vagrantは、デプロイのとこまでやってくれます。
これに、chefやansibleを合わせて使ってプロビジョニングをするのもとても面白そう。

そこまでいけば、スケジュールで、ピーク時間帯はスケールアウトして、そこが終わったらスケールインするとか、柔軟な環境構築ができるようになるので、面白い設計ができそうですよね。

-Azure
-, , , ,