Microsoft AzureでCLI操作をする方法をまとめます。GUI操作は直感的で学習コストも低いですが、設定量が増えてきたりジョブ化したりする場合はCLIやARM(Azure Resorce Manager)Templateなどの仕組みが必要になります。
azコマンドのインストール
Windows OSの場合
「Azure CLI インストール」ページの「インストール – Windows」タブをブラウザで開きます。
「Azure CLIの最新のリリース」を押下し、msiファイルをダウンロードします。
ダウンロードしたmsiファイルを実行します。
「I Accept the terms in the License Agreement」にチェックを入れ、「Install」を押下します。
インストールが完了するまで待ち、「Finish」を押下します。
MacOSの場合
MacOSの場合は、HomeBrewを用いてazコマンドのインストール可能です。
brew update && brew install azure-cli
azコマンドの操作
ログイン
適当なターミナルを立ち上げ、az loginコマンドを実行します。
az loginコマンドを実行すると、ブラウザが立ち上がり認証を求められます。
認証に成功すると、以下のような画面が表示されます。10秒待つか「Azure CLI Documents」を押下すると、ログインされます。
再度、ターミナルを表示すると、ログイン先のサブスクリプション名やテナントIDなどの情報が出力されている事が確認できます。
リソースの作成例
公式ドキュメントの「Azure CLI / チュートリアル / 仮想マシンを作成する」を元に操作方法を説明します。このページでは、リソースグループと仮想ネットワークの操作しか説明していません。公式には「仮想マシンの作成方法」「クエリの使い方」なども紹介されていますので、必要に応じて公式資料も参照ください。
リソースグループの作成
作成操作
az group createコマンドでリソースグループを作成します。
resourceGroup=VMTutorialResources location=japaneast az group create --name $resourceGroup --location $location
GUIによる確認
「全般」「リソースグループ」の順に押下し、「リソースグループ」の画面を開きます。
「VMTutorialResources」というリソースグループが作成されている事を確認します。なお、「NetworkWatcherRG」は自動的に作成されるリソースグループです。
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による確認
「ネットワーキング」「仮想ネットワーク」の順に押下し、「仮想ネットワーク」の画面を開きます。
「TutorialVNet1」という仮想ネットワークが作成されている事を確認します。
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による確認
「ネットワーキング」「仮想ネットワーク」の順に押下し、「仮想ネットワーク」の画面を開きます。
仮想ネットワーク名が1つも表示されていない事を確認します。
CLIによる確認
az network vnet listコマンドを使用すると、作成済の仮想ネットワークを表示できます。コマンド実行の結果、空の配列が返される(全ての仮想ネットワークが削除された)ことを確認します。
admin@mac19 doc % az network vnet list [] admin@mac19 doc %
リソースグループ削除の確認
GUIによる確認
「全般」「リソースグループ」の順に押下し、「リソースグループ」の画面を開きます。
「VMTutorialResources」というリソースグループが存在しない事を確認します。なお、「NetworkWatcherRG」は明示的に削除していませんので残存しています。もし気になるようならば、「NetworkWatcherRG」を明示的に削除しても差し支えございません。
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