Azure + VagrantでUbuntu14.04を起動するまで	


## はじめに

他のサービスもそうだけど、APIどんどんアップデートされていき、ググったブログの設定が使えなくなっているので、2016/08/15現在のvagrant-azureの設定をさらしておく。


## 準備

以下の準備は終わっていることを前提とします

* vagrantと、vagrant-azure-pluginのインストール
	* vagrant dotenv pluginのインストールも必要です

```
$ vagrant plugin install vagrant-azure dotenv
```

* azureアカウントの作成
* azure-cliのインストールとセットアップ
	* 設定のためのファイルをダウンロードし、サブスクリプションをセットアップする必要があります

インストール方法は以下のサイトで紹介されているので、参考してセットアップしましょう。

* http://qiita.com/zakkied/items/667418c6b9b1ea349687

その後、azure-cliで以下の情報を取得しておきます

* azure.pemのダウンロード

```
$ azure account cert export -f azure.pem
```
* azureイメージIDの検索と決定
	* 下記のコマンドで、Ubuntu14.04のイメージを探します。できるだけ日付が最新のものが良いでしょう。

```
$ azure vm image list | grep Ubuntu
```

* azureアクセス用の秘密鍵
	* RSA鍵だとうまくいきません。以下で作っておきます

```
$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout azure.key -out azure-cert.pem
```

## Vagrantfileの作成


現状、Vagrantがきちんと立ち上がる設定は以下のとおり

```
# -*- mode: ruby -*-
# vi: set ft=ruby :

Dotenv.load

ENV['VAGRANT_DEFAULT_PROVIDER'] = "virtualbox"
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provider :azure do |provider, override|
      provider.subscription_id      = "#{ENV['AZURE_SUBSCRIPTION_ID']}"
      provider.mgmt_certificate     = "#{ENV['AZURE_MGMT_CERTIFICATE']}"
      provider.mgmt_endpoint        = 'https://management.core.windows.net/'
      # vm settings
      provider.vm_image             = "#{ENV['AZURE_VM_IMAGE']}"
      provider.vm_name              = "#{ENV['AZURE_VM_NAME']}"
      provider.vm_size              = "#{ENV['AZURE_VM_SIZE']}"
      provider.vm_user              = "#{ENV['AZURE_SSH_USERNAME']}"
      provider.vm_location          = "#{ENV['AZURE_VM_LOCATION']}"
      provider.cloud_service_name   = "#{ENV['AZURE_CLOUD_SERVICE_NAME']}"
      provider.storage_acct_name    = "#{ENV['AZURE_STORAGE_ACCNT_NAME']}"

      override.ssh.username         = "#{ENV['AZURE_SSH_USERNAME']}"
      override.ssh.private_key_path = "#{ENV['AZURE_SSH_PRIVATE_KEY_PATH']}"
      override.vm.box               = "#{ENV['AZURE_VM_BOX_NAME']}"
  end
end
```

ロードする.envファイルの設定は以下のとおりです。

```
AZURE_SUBSCRIPTION_ID = "<Azureのポータルから取得できます>"
AZURE_MGMT_CERTIFICATE = "azure.pem" # さっき作ったやつ
AZURE_SSH_PRIVATE_KEY_PATH = "azure.key" # opensslコマンドで作ったやつ
AZURE_VM_IMAGE = “<azure vm image listで探したやつ>”
AZURE_VM_NAME = “<任意の名前をつけましょう>”
AZURE_VM_SIZE = "Small" # これまでのブログ設定ではエラーになることが多いです。エラーメッセージから正式なサイズを拾いましょう
AZURE_VM_LOCATION = "Japan East" # 適当に
AZURE_VM_BOX_NAME = “<任意の名前をつけましょう>”
AZURE_SSH_USERNAME = "ubuntu" # AWSなど他のサービスと併用する場合はubuntuにしておくと便利（デフォルトはvagrant）
AZURE_CLOUD_SERVICE_NAME = “<任意の名前をつけましょう>”
AZURE_STORAGE_ACCNT_NAME = “<英単語のみ。スペースや’-’, ‘_’はダメです>”
```

上記、#以降はコメントなので、実際に.envファイルを編集するときは削除して下さい。作成するときの注意点は以下のとおりです。

* provider.storrage_acct_nameはオプショナルですが、入れないと際限なくStorageアカウントを量産し、しかも消せません。必ず設定したほうが良いです
	* 現状、azure cliを使うとアカウント内部のストレージそのものは面倒な手続きの後、消すことができます
* override.ssh.private_key_pathはssh_keygenで作ったRSA鍵がなぜか使えません。前述のopensslで作ったものを使いましょう。また、private_key_pathはオプショナルなはずですが、vm_passwordか、private_key_fileはどちらかは必須であるとエラーになるので、かならず設定しましょう（逆に言えば、パスワードを設定することでも通ります）

## 制約事項

* 上記で、仮想マシンは作れますが、この状態だと、22番ポートしか通りません。必要に応じて、provider.tcp_endpoints = ’80:80’などを設定して、ポートを通す必要があると思われます（ポータルから設定したため、未確認）

## 参考

以下のマスターのドキュメントが1番、答えに近いです（検索するとv2.0のドキュメントが出てきますので、masterに切り替えましょう）

* https://github.com/Azure/vagrant-azure/tree/master