VagrantでAzureに仮想マシン(Ubuntu)を作成する

VagrantでAzureに入門してみました。

1.環境

  • ワークマシン : Mac OSX 10.10
  • ruby : ruby 2.1.4
  • vagrant : 1.6.5
  • node.js : v0.10.31

ワークマシンには、ruby, vagrant, node.jsがインストール済みの前提です。Linux環境が欲しかったので、仮想マシンはUbuntuを選択しました。

2.Azure CLIインストール

手始めにAzure CLIをインストールします。Azure CLIはnpmでインストールします。WindowsまたはMacの場合はインストーラが用意されているのでそれを使ってもOKです。

$ npm install azure-cli -g

バージョンを確認してみます。

$ azure --version
0.8.11 (node: 0.10.31)

3.Azureサブスクリプションに接続

Azure CLIで各種コマンドを実行するためにはAzureのサブスクリプションが必要です。サブスクリプションに接続する方法は以下の2通りあります。

  1. 発行設定ファイル(publish settings file)をダウンロードして使用する
  2. 組織のアカウントを使用して Azure にログインする

「組織のアカウント」= Azure Active Directoryに登録されたユーザです。2.の方法でサブスクリプションに接続する場合は予めAzure Active Directoryにディレクトリとユーザを登録しておく必要があります。

今回は1.の発行設定ファイルをダウンロード&インポートする方法でやってみました。

(1)発行設定ファイルのダウンロード

以下のコマンドを実行し、発行設定ファイルをダウンロードします。

$ azure account download

ブラウザが起動しAzureのログイン画面が表示されます。 サブスクリプションが有効なアカウントでログインすると、設定ファイルのダウンロードが開始されます。

(2)発行設定ファイルのインポート

ファイルのダウンロードが完了したら、それをimportします。

$ azure account import ~/Downloads/Microsoft\ Partner\ Network-12-12-2014-credentials.publishsettings

importが完了したら発行設定ファイル(〜.publishsettings)は不要なので、削除しておいた方がセキュリティ上安全です。(ファイルが第三者に悪用されないように。)

サブスクリプションへの接続情報はhomeディレクトリの.azureディレクトリに保存されます。なお、Azureのドキュメントによると、セキュリティ上の観点からWindowsであればBitLockerで、MacであればFileVaultでhomeディレクトリを暗号化することが推奨されています。

これでAzure CLIから各種コマンドの実行が行える状態となりました。

4.AzureのサブスクリプションIDの確認と管理証明書の生成

Azure REST APIにアクセスするためには以下の情報が必要です。(後ほどVagrantfileで使います。)

  1. AzureのサブスクリプションID
  2. Azureの管理証明書

(1)サブスクリプションIDの確認

Azure CLIで確認します。azure account listを実行すると、ID列にサブスクリプションIDが表示されます。

$ azure account list
info:    Executing command account list
data:    Name                       Id                                    Current
data:    -------------------------  ------------------------------------  -------
data:    Microsoft Partner Network  <AZURE SUBSCRIPTION ID>                   true
info:    account list command OK

(2)管理証明書の生成

X.509形式の証明書が必要です。証明書はAzure CLIで生成することができます。

以下のコマンドを実行すると秘密鍵を含む証明書ファイルがazure.pemという名前で生成される一方で、秘密鍵を含まない.cer形式の証明書ファイルがAzure上に保存されます。

azure account cert export -f azure.pem

Azure上の証明書は、Azure管理ポータルの「設定」-「管理証明書」から確認できます。

5.sshキーの生成

Ubuntuへsshで接続するためのキーも生成しておきます。こちらはopensslコマンドを使って生成します。形式はX.509です。

質問に対しては、すべてEnter(無回答)で返してOKです。

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout myPrivateKey.key -out myCert.pem
Generating a 2048 bit RSA private key
.............................................................+++
..................+++
writing new private key to 'myPrivateKey.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

秘密鍵ファイルのパーミッションは600に設定しておきます。

$ chmod 600 myPrivateKey.key

作成したファイルは~/.sshなど、任意のディレクトリに配置しておきます。

$ mv azure* ~/.ssh

ここで生成した証明書ファイルは(myCert.pem)、Vagrantでの仮想マシンの作成の過程でUbutuサーバにアップロードされます。

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

ここから先はVagrantでの作業です。はじめにvagrant-azureプラグインをインストールします。

$ vagrant plugin install vagrant-azure

7.Dummy boxを追加

Azure用のダミーのboxを追加します。

$ vagrant box add azure https://github.com/msopentech/vagrant-azure/raw/master/dummy.box

8.Vagrantfileを作成

vagrant initを実行してVagrantfileを作成します。

$ mkdir azure
$ cd azure
$ vagrant init

Vagrantfileはvagrant-azureのREADMEにサンプルが載っているので、それに倣って以下のような内容にします。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = 'azure'

config.vm.provider :azure do |azure|
# Azure REST APIにアクセスするための情報
azure.mgmt_certificate = '/Users/yuyawata/.ssh/azure.pem'
azure.mgmt_endpoint = 'https://management.core.windows.net'
azure.subscription_id = '<AZURE SUBSCRIPTION ID>'

# 仮想マシンで使用するimageの識別名と、VMに作成するユーザ名とパスワード
azure.vm_image = 'b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20140927-en-us-30GB'
azure.vm_user = 'ubuntu' # defaults to 'vagrant' if not provided
azure.vm_password = '<password>' # min 8 characters. should contain a lower case letter, an uppercase letter, a number and a special character

# 仮想マシンの識別名とDNS名(DNS名は<cloud_service_name>.cloudapp.net となる)
azure.vm_name = 'ubuntu-test-nmbr8' # max 15 characters. contains letters, number and hyphens. can start with letters and can end with letters and numbers
azure.cloud_service_name = 'ubuntu-test-nmbr8' # same as vm_name. leave blank to auto-generate

# locationの指定
azure.vm_location = 'Japan East' # e.g., West US

# ssh用の秘密鍵と証明書ファイル
azure.ssh_private_key_file = '/Users/yuyawata/.ssh/myPrivateKey.key'
azure.ssh_certificate_file = '/Users/yuyawata/.ssh/myCert.pem'
end

# sshで接続するためのユーザ名とパスワード。azure.vm_user, azure.vm_passwordと同じ値を指定する
config.ssh.username = 'ubuntu' # the one used to create the VM
config.ssh.password = '<password>' # the one used to create the VM
end

選択可能なvm_imageとvm_locationの一覧はAzure CLIから確認できます。

# vm_image
% azure vm image list
# vm_location
% azure vm location list

9.仮想マシンの作成

providerを指定して、vagrant upコマンドを実行します。数分で仮想マシンの作成が完了します。

$ vagrant up --provider=azure

参考

comments powered by Disqus