Azure CLI操作(azコマンド)の説明

スポンサーリンク

Microsoft AzureでCLI操作をする方法をまとめます。GUI操作は直感的で学習コストも低いですが、設定量が増えてきたりジョブ化したりする場合はCLIやARM(Azure Resorce Manager)Templateなどの仕組みが必要になります。

azコマンドのインストール

Windows OSの場合

Azure CLI インストール」ページの「インストール – Windows」タブをブラウザで開きます。

「Azure CLIの最新のリリース」を押下し、msiファイルをダウンロードします。

Azure CLI for windowsのダウンロード

ダウンロードしたmsiファイルを実行します。

Azure CLI for windowsのインストール 01

「I Accept the terms in the License Agreement」にチェックを入れ、「Install」を押下します。

Azure CLI for windowsのインストール 02

インストールが完了するまで待ち、「Finish」を押下します。

Azure CLI for windowsのインストール 03

MacOSの場合

MacOSの場合は、HomeBrewを用いてazコマンドのインストール可能です。

brew update && brew install azure-cli

azコマンドの操作

ログイン

適当なターミナルを立ち上げ、az loginコマンドを実行します。

az loginの操作 01

az loginコマンドを実行すると、ブラウザが立ち上がり認証を求められます。

az loginの操作 02

認証に成功すると、以下のような画面が表示されます。10秒待つか「Azure CLI Documents」を押下すると、ログインされます。

az loginの操作 03

再度、ターミナルを表示すると、ログイン先のサブスクリプション名やテナントIDなどの情報が出力されている事が確認できます。

az loginの操作 04

リソースの作成例

公式ドキュメントの「Azure CLI / チュートリアル / 仮想マシンを作成する」を元に操作方法を説明します。このページでは、リソースグループと仮想ネットワークの操作しか説明していません。公式には「仮想マシンの作成方法」「クエリの使い方」なども紹介されていますので、必要に応じて公式資料も参照ください。

リソースグループの作成

作成操作

az group createコマンドでリソースグループを作成します。

resourceGroup=VMTutorialResources
location=japaneast

az group create --name $resourceGroup --location $location
GUIによる確認

「全般」「リソースグループ」の順に押下し、「リソースグループ」の画面を開きます。

リソースグループ作成の確認 01

「VMTutorialResources」というリソースグループが作成されている事を確認します。なお、「NetworkWatcherRG」は自動的に作成されるリソースグループです。

リソースグループ作成の確認 02

CLIによる確認

az group listコマンドを使用すると、作成済のリソースグループを表示できます。

admin@mac19 doc % az group list
[
  {
    "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/NetworkWatcherRG",
    "location": "japaneast",
    "managedBy": null,
    "name": "NetworkWatcherRG",
    "properties": {
      "provisioningState": "Succeeded"
    },
    "tags": null,
    "type": "Microsoft.Resources/resourceGroups"
  },
  {
    "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/VMTutorialResources",
    "location": "japaneast",
    "managedBy": null,
    "name": "VMTutorialResources",
    "properties": {
      "provisioningState": "Succeeded"
    },
    "tags": null,
    "type": "Microsoft.Resources/resourceGroups"
  }
]
admin@mac19 doc % 

仮想ネットワークの作成

作成操作

az network vnet createコマンドで仮想ネットワークを作成します。

vnetName=TutorialVNet1
subnetName=TutorialSubnet1
vnetAddressPrefix=10.0.0.0/16
subnetAddressPrefix=10.0.0.0/24

az network vnet create \
  --name $vnetName \
  --resource-group $resourceGroup \
  --address-prefixes $vnetAddressPrefix \
  --subnet-name $subnetName \
  --subnet-prefixes $subnetAddressPrefix
GUIによる確認

「ネットワーキング」「仮想ネットワーク」の順に押下し、「仮想ネットワーク」の画面を開きます。

仮想ネットワーク作成の確認 01

「TutorialVNet1」という仮想ネットワークが作成されている事を確認します。

仮想ネットワーク作成の確認 02

CLIによる確認

az network vnet listコマンドを使用すると、作成済の仮想ネットワークを表示できます。

admin@mac19 doc % az network vnet list
[
  {
    "addressSpace": {
      "addressPrefixes": [
        "10.0.0.0/16"
      ]
    },
    "bgpCommunities": null,
    "ddosProtectionPlan": null,
    "dhcpOptions": {
      "dnsServers": []
    },
    "enableDdosProtection": false,
    "enableVmProtection": null,
    "encryption": null,
    "etag": "W/\"47fac824-b66f-4f4f-ac13-fc9db11c6987\"",
    "extendedLocation": null,
    "flowTimeoutInMinutes": null,
    "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/VMTutorialResources/providers/Microsoft.Network/virtualNetworks/TutorialVNet1",
    "ipAllocations": null,
    "location": "japaneast",
    "name": "TutorialVNet1",
    "provisioningState": "Succeeded",
    "resourceGroup": "VMTutorialResources",
    "resourceGuid": "94b00076-3a6e-4e81-86ce-43f072ac49cc",
    "subnets": [
      {
        "addressPrefix": "10.0.0.0/24",
        "addressPrefixes": null,
        "applicationGatewayIpConfigurations": null,
        "delegations": [],
        "etag": "W/\"47fac824-b66f-4f4f-ac13-fc9db11c6987\"",
        "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/VMTutorialResources/providers/Microsoft.Network/virtualNetworks/TutorialVNet1/subnets/TutorialSubnet1",
        "ipAllocations": null,
        "ipConfigurationProfiles": null,
        "ipConfigurations": null,
        "name": "TutorialSubnet1",
        "natGateway": null,
        "networkSecurityGroup": null,
        "privateEndpointNetworkPolicies": "Enabled",
        "privateEndpoints": null,
        "privateLinkServiceNetworkPolicies": "Enabled",
        "provisioningState": "Succeeded",
        "purpose": null,
        "resourceGroup": "VMTutorialResources",
        "resourceNavigationLinks": null,
        "routeTable": null,
        "serviceAssociationLinks": null,
        "serviceEndpointPolicies": null,
        "serviceEndpoints": null,
        "type": "Microsoft.Network/virtualNetworks/subnets"
      }
    ],
    "tags": {},
    "type": "Microsoft.Network/virtualNetworks",
    "virtualNetworkPeerings": []
  }
]
admin@mac19 doc % 

リソースの削除例

削除操作

Azureはリソースグループを削除すると、リソースグループに所属するリソースを全て削除する事ができます。リソース1つ1つを削除しても良いですが、リソースグループ単位で削除操作をすれば削除漏れを防ぐ事ができます。

az group deleteコマンドを使用するとリソースグループを削除する事ができます。–no-waitオプションを付与すると削除完了まで待たず、非同期で削除処理を遂行する事ができます。

az group delete --name $resourceGroup --no-wait

仮想ネットワーク削除の確認

GUIによる確認

「ネットワーキング」「仮想ネットワーク」の順に押下し、「仮想ネットワーク」の画面を開きます。

仮想ネットワーク削除の確認 01

仮想ネットワーク名が1つも表示されていない事を確認します。

仮想ネットワーク削除の確認 02

CLIによる確認

az network vnet listコマンドを使用すると、作成済の仮想ネットワークを表示できます。コマンド実行の結果、空の配列が返される(全ての仮想ネットワークが削除された)ことを確認します。

admin@mac19 doc % az network vnet list
[]
admin@mac19 doc % 

リソースグループ削除の確認

GUIによる確認

「全般」「リソースグループ」の順に押下し、「リソースグループ」の画面を開きます。

リソースグループ削除の確認 01

「VMTutorialResources」というリソースグループが存在しない事を確認します。なお、「NetworkWatcherRG」は明示的に削除していませんので残存しています。もし気になるようならば、「NetworkWatcherRG」を明示的に削除しても差し支えございません。

リソースグループ削除の確認 02

CLIによる確認

az group listコマンドを使用すると、作成済のリソースグループを表示できます。「VMTutorialResources」が表示されない事を確認します。

admin@mac19 doc % az group list
[
  {
    "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/NetworkWatcherRG",
    "location": "japaneast",
    "managedBy": null,
    "name": "NetworkWatcherRG",
    "properties": {
      "provisioningState": "Succeeded"
    },
    "tags": null,
    "type": "Microsoft.Resources/resourceGroups"
  }
]
admin@mac19 doc % 

ログアウト操作

az logoutコマンドでAzureからのログアウトができます。

az logout

補足

ヘルプの読み方

azコマンドのヘルプは非常に充実していますので、マニュアルを熟読しなくてもヘルプを見れば十分操作できます。以下のように-hを付与して実行すればヘルプが見られます。

admin@mac19 ~ % az network vnet -h

Group
    az network vnet : Manage Azure Virtual Networks.
        To learn more about Virtual Networks visit https://docs.microsoft.com/azure/virtual-
        network/virtual-network-manage-network.

Subgroups:
    peering                      : Manage peering connections between Azure Virtual Networks.
    subnet                       : Manage subnets in an Azure Virtual Network.

Commands:
    check-ip-address             : Check if a private IP address is available for use within a
                                   virtual network.
    create                       : Create a virtual network.
    delete                       : Delete a virtual network.
    list                         : List virtual networks.
    list-available-ips [Preview] : List some available ips in the vnet.
    list-endpoint-services       : List which services support VNET service tunneling in a given
                                   region.
    show                         : Get the details of a virtual network.
    update                       : Update a virtual network.

To search AI knowledge base for examples, use: az find "az network vnet"

Please let us know how we are doing: https://aka.ms/azureclihats

このヘルプでやや読み方が慣れないのが「Subgroup」です。基本的に、create, delete, list, show, updateの操作が可能ですが、Subgroupの表示がある場合は「az network vnet」の後にサブグループの指定が可能である事を意味します。具体的には、以下のようなコマンドを実行可能である事を示しています。

az network vnet peering create
az network vnet peering list
az network vnet subnet create
az network vnet subnet list

crate, updateなどのコマンドを指定した後に-hを付与すると、そのコマンドに指定可能な引数の一覧を表示する事ができます。

admin@mac19 ~ % az network vnet update -h

Command
    az network vnet update : Update a virtual network.

Arguments
    --address-prefixes                                            : Space-separated list of IP
                                                                    address prefixes for the VNet.
    --bgp-community                                               : The BGP community associated
                                                                    with the virtual network.
    --ddos-protection                                             : Control whether DDoS protection
                                                                    is enabled.  Allowed values:
                                                                    false, true.
    --ddos-protection-plan                                        : Name or ID of a DDoS protection
                                                                    plan to associate with the VNet.
    --defer                                                       : Temporarily store the object in
                                                                    the local cache instead of
                                                                    sending to Azure. Use `az cache`
                                                                    commands to view/clear.
    --dns-servers                                                 : Space-separated list of DNS
                                                                    server IP addresses.
    --enable-encryption                                 [Preview] : Enable encryption on
                                                                    the virtual network.  Allowed
                                                                    values: false, true.

  <omitted>

表示の整形

azコマンドはJMESPathクエリを用いて表示を整形する事ができます。JMESPathはJSONクエリの規格のひとつですが、現在は、jqコマンド, JSONPath, JMESPathのようにJSONクエリの規格が乱立していますので、他のクエリに慣れている人は若干混乱するかもしれません。

それでは実際に動作確認をしましょう。クエリを用いない場合は、以下のように表示されます。

admin@mac19 ~ % az network vnet list
[
  {
    "addressSpace": {
      "addressPrefixes": [
        "10.0.0.0/16"
      ]
    },

  <omitted>

    "ipAllocations": null,
    "location": "japaneast",
    "name": "TutorialVNet1",
    "provisioningState": "Succeeded",
    "resourceGroup": "VMTutorialResources",

  <omitted>

この出力に対して、仮想ネットワークのアドレス空間のみを抽出するならば、以下のように記述します。

admin@mac19 ~ % az network vnet list \
  --query "[].addressSpace.addressPrefixes[0]"
[
  "10.0.0.0/16"
]

outputを指定するとJSON以外の形式で出力する事もできます。outputに指定できるのは、json, jsonc, none, table, tsv, yaml, yamlcです。

admin@mac19 ~ % az network vnet list \
  --query "[].addressSpace.addressPrefixes[0]" \
  --output tsv
10.0.0.0/16

outputをtableに指定する場合は、queryでハッシュ値を返すように整形すれば綺麗な見た目になります。以下は仮想ネットワーク名とアドレス空間を表示する例です。

admin@mac19 ~ % az network vnet list \
  --query "[].{addressSpace:addressSpace.addressPrefixes[0],vnetName:name}" \
  --output table
AddressSpace    VnetName
--------------  -------------
10.0.0.0/16     TutorialVNet1

サブスクリプション指定

Azureアカウントが複数のサブスクリプションに結びついている場合もあります。例えば、以下のようにaz loginコマンド実行時に複数のサブスクリプションが表示される事もあります。

$ az login
The default web browser has been opened at https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "a8f8d8d3-ad2c-4d3a-80f5-f6c5753a5e10",
    "id": "2e2f81a9-b030-410f-9784-c582580c932e",
    "isDefault": true,
    "managedByTenants": [],
    "name": "gokatei-subscription-02",
    "state": "Enabled",
    "tenantId": "a8f8d8d3-ad2c-4d3a-80f5-f6c5753a5e10",
    "user": {
      "name": "user01@gokatei03.onmicrosoft.com",
      "type": "user"
    }
  },
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "a8f8d8d3-ad2c-4d3a-80f5-f6c5753a5e10",
    "id": "80bfabd6-0ec8-45ee-8ead-87713041a2cc",
    "isDefault": false,
    "managedByTenants": [],
    "name": "gokatei-subscription-01",
    "state": "Enabled",
    "tenantId": "a8f8d8d3-ad2c-4d3a-80f5-f6c5753a5e10",
    "user": {
      "name": "user01@gokatei03.onmicrosoft.com",
      "type": "user"
    }
  }
]

このような場合は、以下のようにaz account setコマンドでデフォルト設定となるサブスクリプションを指定できます。

az account set --subscription "gokatei-subscription-01"

現在、どのサブスクリプションがデフォルト設定になっているかはaz account showコマンドなどで確認できます。

$ az account show               
{
  "environmentName": "AzureCloud",
  "homeTenantId": "a8f8d8d3-ad2c-4d3a-80f5-f6c5753a5e10",
  "id": "80bfabd6-0ec8-45ee-8ead-87713041a2cc",
  "isDefault": true,
  "managedByTenants": [],
  "name": "gokatei-subscription-01",
  "state": "Enabled",
  "tenantId": "a8f8d8d3-ad2c-4d3a-80f5-f6c5753a5e10",
  "user": {
    "name": "user01@gokatei03.onmicrosoft.com",
    "type": "user"
  }
}

バージョンアップ

azコマンドはまだまだ開発中の引数が多く頻繁にバージョンアップされます。なるべく新しいバージョンを使った方が使える引数も増えますので、定期的にバージョンアップしましょう。

現在のバージョンは以下のような操作で確認できます。

$ az version
{
  "azure-cli": "2.33.1",
  "azure-cli-core": "2.33.1",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {
    "costmanagement": "0.1.1",
    "ssh": "1.0.1"
  }
}

以下のコマンドでバージョンアップが可能です。

$ az upgrade

操作ログは以下のようになります。

$ az upgrade
This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Your current Azure CLI version is 2.33.1. Latest version available is 2.36.0.
Please check the release notes first: https://docs.microsoft.com/cli/azure/release-notes-azure-cli
Do you want to continue? (Y/n): Y

 <omitted>

This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
You already have the latest azure-cli version: 2.36.0
Upgrading extensions
Checking update for ssh
Checking update for costmanagement
Upgrade finished.You can enable auto-upgrade with 'az config set auto-upgrade.enable=yes'. More details in https://docs.microsoft.com/cli/azure/update-azure-cli#automatic-update
タイトルとURLをコピーしました