Azure CLIとPowerShellの違いをVM構築で比較|az vmとNew-AzVMを使い分ける実践

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > Azure CLIとPowerShellの違いをVM構築で比較|az vmとNew-AzVMを使い分ける実践
「Azure CLIを使えばいいのか、PowerShellを使えばいいのか、どちらで覚えればいいのかわからない」
Azure学習を始めると、VMひとつ作るにも `az vm create` と `New-AzVM` の2通りの方法が出てきて戸惑う。

この記事では、Azure CLIとPowerShell(Az モジュール)のコマンド体系・実行環境・構文の違いを、Linux VM構築の実践手順を通じて比較します。
どちらを日常操作の主軸に置くべきか、Linuxエンジニア視点の判断軸も示します。

この記事のポイント

・Azure CLIはLinux/Mac/Windowsで動くシェル向けツール
・PowerShell Az モジュールはWindows PowerShell文化圏の構文体系
・VM作成は az vm create(1行)vs New-AzVM(数十行)で記述量が大きく違う
・Linuxサーバー運用ならAzure CLIを主軸、WindowsAD連携ならPowerShellを使い分ける


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Azure CLIとPowerShellの違い(実行環境とコマンド体系)

Azure VMを操作するツールは大きく2系統に分かれる。

Azure CLIは、Pythonで実装されたクロスプラットフォームのコマンドラインツールだ。
bash・zsh・PowerShellの上でも動き、`az` コマンドひとつで Azure のほぼすべての操作を実行できる。
Linux/Macを日常環境にするエンジニアにとって最も馴染みやすい。

PowerShell(Az モジュール)は、Microsoft製のタスク自動化シェル上で動くAzureモジュール群だ。
`New-AzVM`・`Get-AzVM`・`Remove-AzVM` のように、PowerShell標準の「動詞-名詞」構文でAzureリソースを操作する。
Windows ServerのActive Directory管理をPowerShellで行うチームは、同じ言語体系でAzure操作も書ける利点がある。
項目 Azure CLI PowerShell (Az)
実行環境 bash / zsh / sh / PowerShell 上 PowerShell 7+ / Windows PowerShell
インストール curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash Install-Module -Name Az
ログイン az login Connect-AzAccount
VM作成 az vm create(1コマンド) New-AzVM(事前にNIC/ディスク等を準備)
コマンド補完 bash-completion 標準対応 Tab補完あり(PSReadLine依存)
シェルスクリプト統合 bash変数・パイプと自然に組み合わせ可 PowerShellスクリプト(.ps1)内で使う

az vm createでLinux VMを構築する(Azure CLI手順)

実行環境: Rocky Linux 9.4 / Ubuntu 24.04 LTS + Azure CLI 2.63.0 で動作確認済み。

1. Azure CLIのインストールと確認

Ubuntu/Debianの場合、公式スクリプトで一発インストールできる。

# Azure CLIインストール(Ubuntu/Debian系) curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash # バージョン確認 az --version

実行結果(抜粋):

azure-cli 2.63.0 core 2.63.0 telemetry 1.1.0 Extensions: ...

2. ログインとサブスクリプション確認

# ブラウザ経由でログイン az login # 現在のサブスクリプション確認 az account show --query "{name:name, id:id, state:state}" -o table

Name Id State ----------------- ------------------------------------ ------- MySubscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Enabled

3. リソースグループとVNetの作成

# リソースグループ作成 az group create --name rg-demo --location japaneast # 仮想ネットワーク作成 az network vnet create --resource-group rg-demo --name vnet-demo --address-prefix 10.1.0.0/16 --subnet-name subnet-frontend --subnet-prefix 10.1.1.0/24

4. az vm createでVM作成

Azure CLIの強みは `az vm create` 1コマンドで、NIC・パブリックIP・OSディスクをまとめて作成できる点だ。

az vm create --resource-group rg-demo --name vm-demo-linux --image Ubuntu2204 --size Standard_B2s --vnet-name vnet-demo --subnet subnet-frontend --admin-username azureuser --generate-ssh-keys --public-ip-sku Standard

成功すると以下のようなJSON出力が返る。

{ "fqdns": "", "id": "/subscriptions/xxxx/resourceGroups/rg-demo/providers/Microsoft.Compute/virtualMachines/vm-demo-linux", "location": "japaneast", "macAddress": "00-22-48-xx-xx-xx", "powerState": "VM running", "privateIpAddress": "10.1.1.4", "publicIpAddress": "20.xxx.xxx.xxx", "resourceGroup": "rg-demo", "zones": "" }

5. SSH接続確認

# publicIpAddress の値でSSH接続 ssh azureuser@20.xxx.xxx.xxx # 接続後にOS確認 lsb_release -a

No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy

az vm create 1コマンドが裏でNIC・パブリックIP・NSG・OSディスクを自動生成してくれるため、手順が非常にシンプルだ。
Azure CLIでのVM構築の詳細はAzureハンズオン講座(azure.linuxmaster.jp)でも体系的に解説している。

New-AzVMでLinux VMを構築する(PowerShell手順)

同じVMをPowerShellのAz モジュールで作成する手順を示す。
Azure CLIと異なり、各リソースを個別に作成してVMに紐づける設計になっている。

1. Az モジュールのインストール

PowerShell 7.x がインストール済みの環境で実行する。

# Az モジュールのインストール(要管理者権限) Install-Module -Name Az -AllowClobber -Scope CurrentUser # バージョン確認 Get-Module -Name Az -ListAvailable | Select-Object Name, Version

2. Connect-AzAccountでログイン

Connect-AzAccount # サブスクリプション確認 Get-AzSubscription | Select-Object Name, Id, State

3. New-AzVMでVM作成

PowerShellでは、NIC・サブネット・VNetを先に変数に格納してからVMを作成するパターンが一般的だ。

# リソースグループ作成 $rg = "rg-demo-ps" $location = "japaneast" New-AzResourceGroup -Name $rg -Location $location # VNetとサブネット作成 $subnetConfig = New-AzVirtualNetworkSubnetConfig ` -Name "subnet-frontend" ` -AddressPrefix "10.2.1.0/24" $vnet = New-AzVirtualNetwork ` -Name "vnet-demo-ps" ` -ResourceGroupName $rg ` -Location $location ` -AddressPrefix "10.2.0.0/16" ` -Subnet $subnetConfig # パブリックIPとNIC作成 $pip = New-AzPublicIpAddress ` -Name "pip-vm-ps" ` -ResourceGroupName $rg ` -Location $location ` -AllocationMethod Static ` -Sku Standard $nic = New-AzNetworkInterface ` -Name "nic-vm-ps" ` -ResourceGroupName $rg ` -Location $location ` -SubnetId $vnet.Subnets[0].Id ` -PublicIpAddressId $pip.Id # VM設定オブジェクト作成 $vmConfig = New-AzVMConfig -VMName "vm-demo-ps" -VMSize "Standard_B2s" # OS・認証情報の設定 $cred = Get-Credential # ユーザー名とパスワードを入力 $vmConfig = Set-AzVMOperatingSystem ` -VM $vmConfig ` -Linux ` -ComputerName "vm-demo-ps" ` -Credential $cred # イメージ・NIC設定 $vmConfig = Set-AzVMSourceImage ` -VM $vmConfig ` -PublisherName "Canonical" ` -Offer "0001-com-ubuntu-server-jammy" ` -Skus "22_04-lts-gen2" ` -Version "latest" $vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id # VM作成実行 New-AzVM -ResourceGroupName $rg -Location $location -VM $vmConfig

RequestId IsSuccessStatusCode StatusCode ReasonPhrase --------- ------------------- ---------- ------------ True OK OK

4. Get-AzVMでVM確認

Get-AzVM -ResourceGroupName $rg -Name "vm-demo-ps" | Select-Object Name, Location, @{N="Size";E={$_.HardwareProfile.VmSize}}

Name Location Size ---- -------- ---- vm-demo-ps japaneast Standard_B2s

az vm create と比べると、PowerShellではリソースを段階的に積み上げていく設計になっており、手順が長くなることがわかる。

Azure CLIとPowerShellの比較と使い分け判断軸

どちらのツールも機能差はほぼないが、チームの技術スタックと運用環境によって選択が変わる。
判断基準 推奨ツール 理由
Linux/Macが日常環境 Azure CLI bash変数・パイプと組み合わせやすい
Windows Server + Active Directory 連携 PowerShell (Az) AD管理と同一言語体系で統一できる
シェルスクリプト自動化 Azure CLI az ... --query でJMESPath抽出が容易
PowerShell DSC / Desired State Configuration PowerShell (Az) インフラ設定管理と統合しやすい
対話的なVM作成・確認 どちらでも可 手順の短さではAzure CLIが優位
Terraform・Ansibleとの組み合わせ Azure CLI CLIプロバイダーが豊富
Linuxサーバーエンジニアがクラウドに移行するケースでは、Azure CLIを主体にして必要な場合だけPowerShellを補助的に使うのが現実的な戦略だ。
特にbashスクリプトによる定期バックアップや自動プロビジョニングには、Azure CLIの方が自然に書ける。

よくあるエラーと対処

「az: command not found」が出る

Azure CLIがインストールされていないか、PATHが通っていない状態だ。

# PATHを確認 echo $PATH | tr ':' ' ' | grep -i azure # 手動でパスを通す(インストール先が /opt/az/bin の場合) export PATH=$PATH:/opt/az/bin echo 'export PATH=$PATH:/opt/az/bin' >> ~/.bashrc

「New-AzVM : The term is not recognized」が出る

Az モジュールがインポートされていない。PowerShellを再起動するか、明示的にインポートする。

Import-Module Az # モジュールが見つからない場合は再インストール Install-Module -Name Az -Force -AllowClobber

「az vm create」でリソースグループが見つからないエラー

`--resource-group` に指定した名前が存在しないか、サブスクリプションが切り替わっている場合に発生する。

# 現在のサブスクリプション確認 az account show --query name -o tsv # リソースグループの存在確認 az group exists --name rg-demo

PowerShellでSSHキー認証でなくパスワード認証になってしまう

`New-AzVM` はデフォルトでパスワード認証になる。SSH公開鍵を指定するには `Set-AzVMOperatingSystem` の `-DisablePasswordAuthentication` と `Add-AzVMSshPublicKey` を追加する必要がある。
Azure CLIの `--generate-ssh-keys` のような「1オプションで完結」する機能はPowerShellにはないため、この点ではCLIの方がシンプルだ。

まとめ

やりたいこと コマンド(Azure CLI) コマンド(PowerShell Az)
ログイン az login Connect-AzAccount
リソースグループ作成 az group create --name rg --location eastus New-AzResourceGroup -Name rg -Location eastus
VNet作成 az network vnet create --name vnet ... New-AzVirtualNetwork -Name vnet ...
Linux VM作成 az vm create --name vm --image Ubuntu2204 ... New-AzVM -ResourceGroupName rg ...
VM一覧確認 az vm list -o table Get-AzVM | Select-Object Name, Location
VM削除 az vm delete --name vm --resource-group rg --yes Remove-AzVM -Name vm -ResourceGroupName rg
Azure CLIとPowerShell AzモジュールはどちらもフルにAzureを操作できるが、LinuxエンジニアにはAzure CLIが圧倒的に使いやすい。
理由は3つ。1行でVM作成が完結すること・bashスクリプトとシームレスに統合できること・`--query` オプションで出力の加工が容易なことだ。
PowerShellはWindowsServerチームやDSCを使う環境で真価を発揮する。

チームの環境に合わせて使い分け、両方を読めるようにしておくと、どのAzure構築ドキュメントでも戸惑わなくなる。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
AzureのVM構築から運用・監視まで、実機ハンズオン形式で学べる講座を用意しています。
>> Azure実践ハンズオン講座の詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。