何回も出てくるのに、手を抜いてちゃんと調べなかったので調べてみる。Azure CLI はよいのだが、問題は、Query で使える JMESPath をちゃんと理解していないことにある。Helpにもサンプルは出てこないので、自分で解決するしかなかったのでそれをメモしておこう。
Azure CLI で WSL2 からログインする
通常のログインは az login
でよいのだが、GUI環境ではない場合下記のログイン方法が使える。
$ az login --use-device
他にも GUIが使えないところで使える方法としては、Service Principal を使う方法などが存在するが、簡単な、実験をするなら上記のがお手軽だ。
さて問題は、デフォルトが、自分が意図したサブスクリプションではなく、複数のサブスクリプションがあるケース。
$ az account show
とすると、現在のサブスクリプションが表示される。これを違うサブスクリプションに変えたい場合
$ az account set -s YOUR_SUBSCRIPTION
とやればよい。ところがたくさんサブスクリプションが出てくるときは面倒だ。下記のようなスキーマになっているので、特定の条件に合ったものだけプロジェクションしたい。
{
"cloudName": "AzureCloud",
"homeTenantId": "HOME_TENANT_A",
"id": "SUBSCRIPTION_ID",
"isDefault": false,
"managedByTenants": [],
"name": "EA DEV",
"state": "Enabled",
"tenantId": "TENANT_A",
"user": {
"name": "YOUR_E_MAIL",
"type": "user"
}
},
{
"cloudName": "AzureCloud",
:
]
USHIO
を含む文字列を検索したい場合は、contains
関数が使える。また、ポイントは --query
の引数は、ダブルクオートでくくる必要がある。ちなみに上記のスキーマだと、プロパティ名の中に配列があるのではなく、一番最初の要素が配列になる。そのようなケースだと次のように書く。二つ目の.[id, name]
はフィルターした結果をプロジェクションするときのどの項目をピックアップするか?という意味。
$ az account list --query "[? contains(name, 'USHIO')].[id, name]"
A few accounts are skipped as they don't have 'Enabled' state. Use '--all' to display them.
[
[
"MY_SUBSCRIPTION_ID",
"Test Sub USHIO"
]
]
ちなみに、フィルターしたくなくて、全件リストしたいときは
$ az account list --query "[].[id,name]"
わかったらそれで特定のサブスクリプションにしてしまえばいい
$ az account set -s MY_SUBSCRIPTION
$ az account show
これで完成。
TODO
実はこの方法を使っても、たまに元のサブスクリプションに戻る。さっと探したけど見つからないので同僚に聞いてみよう。月曜日に。
リソース
それ以外のリソースとしては下記のものが参考になる。