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通りあります。
- 発行設定ファイル(publish settings file)をダウンロードして使用する
- 組織のアカウントを使用して 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で使います。)
- AzureのサブスクリプションID
- 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