読者です 読者をやめる 読者になる 読者になる

Windows Azure command-lineと戯れる

Azure

Windows AzureUbuntu 12.04.3 LTSのVMを立ち上げるまでの手順を、公式のドキュメントを読みつつ、淡々とメモしていく。

Windows Azure command-lineはMacならばdmgをダウンロードできるようだったが、npmで自分で入れたほうが簡単そうだったので、npmで入れることにした。この場合、nvmなどを使ってnode.js, npmをインストールしておく必要がある。

$ npm install -g azure-cli

アカウントの設定

以下のコマンドを実行すると、ブラウザでアカウント情報ダウンロードが開き、必要な設定ファイルをダウンロードしてくれる。

$ azure account download

ダウンロードしたファイルをインポート。

$ azure account import ~/Downloads/MySubscription-credentials.publishsettings

VMの起動

目的のVMのイメージ名が分からないので、次のコマンドで確認した。

$ azure vm image list

結構な数のイメージがあるので、Canonicalの提供しているUbuntu LTSだけを列挙してみる。

$ azure vm image list | grep Canonical | grep LTS

結果として、今回僕が探しているイメージはb39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-12_04_3-LTS-amd64-server-20130827-en-us-30GBという名称であることが分かった。

ロケーション名も列挙して調べておく。

$ azure vm location list
info:    Executing command vm location list
+ Enumerating  locations
data:    Name
data:    --------------
data:    West US
data:    East US
data:    East Asia
data:    Southeast Asia
data:    North Europe
data:    West Europe
info:    vm location list command OK

各ロケーションのレイテンシーは特に調べていないのだが、今回はEast Asia(香港)を使うことにした。

イメージ名とロケーション名が分かったので、早速my-dns-nameというDNS名のVMを作って、ubuntuというユーザーでsshログインできるようにしてみる。

$ azure vm create my-dns-name \
  b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-12_04_3-LTS-amd64-server-20130827-en-us-30GB \
  ubuntu \
  --location "East Asia" \
  --ssh 22 \
  --ssh-cert path/to/cert.pem \
  --no-ssh-password

実際は1行で入力。cert.pemはこの記事を参考にして新規に証明書を作った。他のオプションは自明であろう。

VMが正常に作成されたならば、証明書と同時に生成したRSA秘密鍵を使ってSSHでログインできる。

$ ssh -i path/to/private.key ubuntu@my-dns-name.cloudapp.net

起動中のVM一覧を表示するならば、以下のとおり。

$ azure vm list

後は、Knife Soloで好みに調理してサーバーの設定は完了。実際はknife-azureを使うことになるだろうが、そこまではまだ試していない。また、実運用するならば、Affinity Group, Availability Setの設定必須だろうが、勉強不足でまだベストプラクティスがよく分かっていない。

Endpointを追加する(失敗)

Endpointを追加したいので、これもコマンドラインでやってみる。

が、以下のようなエラーが出て動かない。

% azure vm endpoint create my-dns-name --endpoint-protocol tcp --endpoint-name http 80 80
info:    Executing command vm endpoint create
+ Getting virtual machines
error:   errors is not defined
info:    Error information has been recorded to azure.err

これと同じ問題だと思って、修正がマージされたらしいバージョンも試してみたのだが、うーむ。

Endpointを追加する(成功)

azure vm endpoint --helpを見ていたら、create-multipleというコマンドもあることを知り、もしかしたらと思って試してみたら、こちらはちゃんと動いた。

$ azure vm endpoint create-multiple  my-dns-name 80
$ azure vm endpoint create-multiple  my-dns-name 443

endpoint一覧を取得するには、

$ azure vm endpoint list  my-dns-name
info:    Executing command vm endpoint list
+ Getting virtual machines
data:    Name              Protocol  Public Port  Private Port  Load Balanced
data:    ----------------  --------  -----------  ------------  -------------
data:    endp-443-443-tcp  tcp       443          443           No
data:    endp-80-80-tcp    tcp       80           80            No
data:    ssh               tcp       22           22            No
info:    vm endpoint list command OK

Endpoint名は勝手に、endp-<lb-port>-<vm-port>-の規約で命名されたようだ。本当は、http, httpsというEndpoint名にしたかったんだけど、まあ良しとしよう。

VMを削除する

基本的な操作は一通り試したので、作ったVMをバッサリ消す。

% azure vm delete --blob-delete my-dns-name
info:    Executing command vm delete
+ Getting virtual machines
Delete the VM debugcamp-10 ? [y/n] y
+ Deleting VM
+ Getting virtual machines
info:    Deleting image
info:    vm delete command OK