Azure CLI 2.0 あれこれ 入門編

こんにちは。Azure プラットフォームサポートの比留間です。今回は本 Blog でもあまり取り上げられていなかった Azure CLI 2.0 を使ってみたいと思います。

「コマンドベースのツールは取っつきにくくて…」と敬遠されずに、ちょっと覗いてみてください。今まで大変だったあんなリソースやこんなリソースのデプロイ作業が、少し楽になるかもしれません。

Why Azure CLI 2.0?

ポータル、JSON テンプレート、Azure Powershell と、Azure 上にリソースをデプロイする方法はいろいろありますが、Azure CLI 2.0 はその中でも最後発のツールです。(2017 年 4 月現在)

Azure CLI 2.0 の最大の利点は、Python がインストールされている環境であれば、どんな環境でも動作させられる点にあります。つまり、一度コツをつかんでしまえば、お手元の管理端末が Windows だろうが Linux だろうが Mac だろうが、同じ方法でリソースのデプロイや管理ができます。

また、公式な設計方針というわけではありませんが、同じコマンドベースの Azure Powershell が、デプロイしたいリソースのパラメーターを比較的厳密にチェックするのに対し、Azure CLI 2.0 では入力されたパラメーターに応じて 「それっぽい」 環境を作ってくれることに特徴があります。割と空気を読んでくれる子です。(もちろん、Python のお作法に従ってかっちりとしたスクリプトを書くことも可能な、やればできる子でもあります。)

マウスとキーボードを駆使してポータルを操作するのも、似たような VM を複数台立てる場合には、だんだん面倒になってきますし、操作ミスが怖いです。

JSON テンプレートも環境の完成形が固まってる段階であれば便利ですが、ちょっとした検証をしたいだけの場合にはかえってテンプレート作成の手間の方がかかるかもしれません。

Azure Powershell の生真面目さもいいんだけど、時と場合によってはその真面目さがちと重い… そんな時には Azure CLI 2.0 を思い出してあげてください。

加えて、後発の強みと言いますか、2017 年 2月に一般公開された Managed Disk にもいち早く対応しており、親和性も良好です。やはり最強なのは末弟 ほら、Azure CLI 2.0 を使いたくなってきた!

では早速 Hello World

インストールの手順はこちら をご参照いただくとして、実際にコマンドを叩いてみましょう。

まずはログイン。

 az login

きっとこんなレスポンスが返ってくるはずです。
To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code XYZXYZXYZ to authenticate.

Web ブラウザーで https://aka.ms/devicelogin にアクセスし、XYZXYZXYZ の部分を入力します。Web ブラウザー上で管理者の資格情報を入力したらログイン完了です。

複数のサブスクリプションをお持ちの場合は、以下のコマンドで作業対象のサブスクリプションを選択しておきます。(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx はサブスクリプション ID です。)

 az account set --subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

と、ここでちょっとした Tips を。コマンドベースのツールの宿命として、引数の名称などは間違いのないように入力しなくてはならないのですが、些細なスペルミスなどでエラーが返ってくるのはフラストレーションが溜まってきて、Enter キーを叩く指にもついつい必要以上の力がこもりがちです。そんな時は、途中まで入力して、TAB キーを押してみましょう。

 az account set --sub(ここでTAB) 

そうすると、入力補完が働いて、--subscription と出てきます。
また、「それっぽいコマンドを見つけたけど、使い方が分からない!」という場合には、-h でヘルプを表示できます。

 az account -h 

また、前に実行したものと似たようなコマンドを実行したい場合は、カーソルキーの ↑ で履歴を遡れます。

前振りが長くなりましたが、VM をひとつ作ってみましょう。まずは入れ物となるリソースグループを作ります。

 az group create --name NewRG --location japaneast 

東日本リージョンに、リソースグループ NewRG が出来ました。
では、ここに VM を作ってみます。困ったり間違ったりしたら、とりあえず TAB と ↑ です。

  az vm create --name NewVM --resource-group NewRG --image Win2012R2Datacenter --admin-username adminuser --admin-password 'P@ssword4admin' --storage-sku Standard_LRS 

はい。この 1 行で終わりです。リソースグループ NewRG の中から適当な VNET を見繕って (なければ空気を読んで新規作成します)、Market Place の Windows Server 2012 R2 Datacenter Edition のイメージを使用して、Standard DS1 v2 の VM が作成されます。アタッチされる OS Disk は、Managed Disk です。
もちろん、CLI 2.0 が暗黙のうちに仕事をした部分は明示的に指定することもできますが、興味のある方は az vm create -h で確認してみてください。
ちなみに、Azure Powershell で同様の作業を行うと、こちら の技術情報のような感じになるのですが、ツールの個性みたいなものを感じていただけるのではないかと思います。

なお、 --image 引数の部分について少々補足します。このオプションは、以下のような文字列が予約語になっており、対応する Marketplace の標準 OS イメージを使用できます。

 
CentOS
CoreOS
Debian
openSUSE
RHEL
SLES
UbuntuLTS
Win2008R2SP1
Win2012Datacenter
Win2012R2Datacenter
Win2016Datacenter

一方で、--image 引数には、予め独自に作成したカスタム [イメージ] の名称を指定することもできます。
では、作っておいてたカスタムイメージの名称が、たまたま "Win2012R2Datacenter" なんていう名前だったとしたら、どちらが使われるでしょうか。

正解は、「Marketplace の標準 OS イメージが使用される」です。もし、それでもどうしても愛着のあるカスタムイメージの方を使いたいんだー! という場合、以下のような感じで、イメージのリソースIDを指定することで混同を回避できます。

  az vm create --name NewVM --resource-group NewRG --image /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/NewRG/providers/Microsoft.Compute/images/Win2012R2Datacenter --admin-username adminuser --admin-password 'P@ssword4admin' --storage-sku Standard_LRS 

このリソース ID を明示的に指定する方法は、他のリソースグループ上のリソースを参照する場合にも有効です。

次回は、もう少し進んだ使い方として、スナップショットの管理や VMSS についてもご紹介したいと思います。
最後まで読んでいただきありがとうございました。