はじめに
他のサービスもそうだけど、APIどんどんアップデートされていき、ググったブログの設定が使えなくなっているので、2016/08/15現在のvagrant-azureの設定をさらしておく。
準備
以下の準備は終わっていることを前提とします
- vagrantと、vagrant-azure-pluginのインストール
- vagrant dotenv pluginのインストールも必要です
$ vagrant plugin install vagrant-azure dotenv
- azureアカウントの作成
- azure-cliのインストールとセットアップ
- 設定のためのファイルをダウンロードし、サブスクリプションをセットアップする必要があります
インストール方法は以下のサイトで紹介されているので、参考してセットアップしましょう。
その後、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に切り替えましょう)