LoginSignup
1
0

More than 3 years have passed since last update.

Azure CLI でサブスクリプションを選択する

Posted at

何回も出てくるのに、手を抜いてちゃんと調べなかったので調べてみる。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

実はこの方法を使っても、たまに元のサブスクリプションに戻る。さっと探したけど見つからないので同僚に聞いてみよう。月曜日に。

リソース

それ以外のリソースとしては下記のものが参考になる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0