azureもansibleのazureモジュールもあんまりドキュメント無くて結構はまったので誰かの参考になればと思いメモ
環境
- OSX 10.10
- python 2.7
- ansible 1.9
前提条件
- 管理証明書作成済み、Webコンソールからアップロード済み
- VMのSSHログイン用鍵ペアは作成済み
手順
azure操作用パッケージをインストール
sudo pip install azure
azure認証情報を環境変数にセット
サブスクリプションIDと、管理証明書の場所を環境変数に指定する。
export AZURE_SUBSCRIPTION_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export AZURE_CERT_PATH=~/.ssh/manage.pem
この証明書をmacで作ろうとしてめっちゃハマった。
色んなサイト見たけど結局公式のここの手順で作成したpem使ったら通った。
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer
コンソールにアップロードするのはcer、クライアントで使うのはpemなので注意。
VM作成用playbookの作成
VM作成用のplaybookとインベントリファイルを作成する。
- hosts: 127.0.0.1
connection: local
tasks:
- name: create new virtual machine
local_action:
module: azure
name: sample-vm
role_size: Small
image: 0b11de9248dd4d87b18621318e037d37__RightImage-CentOS-6.6-x64-v14.2.1
location: 'Japan West'
user: admin
state: present
ssh_cert_path: ~/.ssh/sample.pem
storage_account: storage_account_name
password: s@mple1234
wait: yes
127.0.0.1
Playbookの実行
ansible-playbook -i hosts create_vm.yml
結構遅いので進捗気になる方は-vvv
とか付けて。
インスタンスへのアクセス
混んでなければ多分デプロイから3〜5分くらいでインスタンスにアクセス出来るようになる。
特に何も設定しなければport22のアクセスが許可されているはずなので、
ssh admin@sample-vm.cloudapp.net -i ~/.ssh/sample.pem
とかやればアクセス出来る。
備考
VMの名前
cloudapp.net内でユニークである必要がある。
重複しててもエラーメッセージが出ず、最後のVM確認でNot Foundエラーになるので地味に分かりづらい。
証明書
VM用証明書も管理証明書作成と同じように作ってpemを指定する。
パスワード
ansible公式には必須じゃないと書いてあるけど、新規インスタンス作成時はpasswordが無いとエラーになる。
6-72文字で記号と数字(?)を含める必要あり。
ストレージ作成
今のところストレージの自動作成オプションは無さそうなので、手作業で作ったものを使うか、nodeのazureパッケージかなんか使って自動化する必要がありそう。
ストレージのロケーション
ストレージのlocationとインスタンスのlocationをあわせる必要がある。
参考
ansible公式ドキュメント
http://docs.ansible.com/azure_module.html
ansibleのazureモジュール
https://github.com/ansible/ansible-modules-core/blob/9d25d88b9a993d628afdd69a06793debca37c5d1/cloud/azure/azure.py
Microsoft公式
http://azure.microsoft.com/ja-jp/documentation/articles/cloud-services-python-how-to-use-service-management/