AzureのLinux VMはコンソールやCLIから後からサイズを変更できます。ただし 「割り当て解除(deallocate)が必要かどうか」 の判断を誤ると、予期せぬ停止を招いたり、変更できないまま詰まったりします。さらに データディスクの上限 はVMサイズごとに異なるため、サイズダウン時は特に注意が必要です。
この記事では az vm resize を使ったAzureのLinux VMサイズ変更を、Azure CLI 2.65.0・Rocky Linux 9.4の実機ログで解説します。割り当て解除の要否判断からデータディスク上限の確認まで、現場で即使えるハンズオン手順をカバーします。
この記事のポイント
・az vm resize --size で変更先VMサイズを指定するだけでスケールアップできる
・同一クラスター内サイズなら無停止変更可能、ホスト変更が必要なら割り当て解除が必須
・データディスク上限はサイズごとに異なり、超過すると変更エラーになる
・AllocationFailed時は別ゾーン・リージョンへの変更か、時間を空けて再試行する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜAzure VMのサイズ変更が必要になるのか?
VMサイズの変更が必要になる場面は主に3つあります。・スケールアップ(パワー不足):サービス成長に伴いCPUやメモリが慢性的に不足する。Webアプリのレスポンスが遅い、バッチ処理が時間内に終わらないといった症状で気づく
・スケールダウン(コスト最適化):開発・検証環境を本番と同じサイズで動かしていて、費用対効果が合わない。オーバースペックなVMをひとつ小さいサイズに落とすだけでコストを大幅削減できる
・季節対応:繁忙期に合わせてスペックを上げ、閑散期に戻す運用。Auto Scalingを使えない構成でも手動のリサイズで対応できる
AWSのEC2では「インスタンスタイプの変更」と呼びますが、Azureでは「VMサイズの変更」と呼びます。EC2と同様、変更はAPIやCLIで完結でき、ディスクを再作成したりOSを再インストールしたりする必要はありません。OSディスク・データディスクの内容はそのまま引き継がれます。
割り当て解除が必要なケースと不要なケース
「停止なしで変更できるかどうか」——これがVM運用者にとって最も重要な判断軸です。AzureのVMは物理的な ホストクラスター 上で動いています。同じクラスター内に変更先のVMサイズが存在するなら、VMを停止(deallocate)せずにリサイズできます。逆に、変更先サイズが別のクラスターにしか存在しない場合は、一度VMを停止してから別クラスターに移動させる必要があるため、割り当て解除が必須 になります。
・割り当て解除不要(無停止変更可能):同一ファミリー内の上下変更(例: Standard_B2s → Standard_B4ms)では多くの場合、割り当て解除なしで変更できる
・割り当て解除必須:ファミリーをまたぐ変更(例: BシリーズからDsv3シリーズへ)や、物理ホスト世代が異なるサイズへの変更では割り当て解除が必要になる
ただし「同一ファミリーなら必ず無停止」というわけではありません。割り当て解除なしで試みて失敗したら、割り当て解除して再試行する——これが実務上の正しいフローです。
変更可能なサイズの一覧(az vm list-vm-resize-options) は現在のVMが属するクラスターで利用可能なサイズのみを返します。このリストに含まれるサイズなら、割り当て解除なしで変更できる可能性が高いです。
az vm resizeでサイズ変更する手順
この記事の手順は以下の環境で動作確認しています。・Rocky Linux 9.4(Azure VM、Standard_B2s)
・Azure CLI 2.65.0(az コマンド)
・リソースグループ: rg-linux-practice(japaneast)
・変更対象VM: linuxvm-rocky94
1. 現在のVMサイズとリソース情報を確認する
まず現在のVMサイズを確認します。# 現在のVMサイズを確認 $ az vm show --resource-group rg-linux-practice --name linuxvm-rocky94 --query hardwareProfile.vmSize -o tsv Standard_B2s # VM全体の概要をテーブルで確認 $ az vm show --resource-group rg-linux-practice --name linuxvm-rocky94 --query "{Name:name, Size:hardwareProfile.vmSize, Location:location, PowerState:instanceView.statuses[1].displayStatus}" -o table Name Size Location PowerState --------------- ------------- ---------- ------------- linuxvm-rocky94 Standard_B2s japaneast VM running
2. 変更可能なVMサイズ一覧を取得する
現在のVMが属するクラスターで利用可能なサイズを取得します。このリストに含まれるサイズであれば、無停止変更に挑戦できます。# 変更可能なVMサイズ一覧(MaxDataDiskCount も同時確認) $ az vm list-vm-resize-options --resource-group rg-linux-practice --name linuxvm-rocky94 --query "[].{Name:name,CPU:numberOfCores,MemMB:memoryInMb,MaxDisks:maxDataDiskCount}" -o table | grep -E "^Name|B2s|B4ms|D2s|D4s" Name CPU MemMB MaxDisks Standard_B2s 2 4096 4 Standard_B4ms 4 16384 8 Standard_D2s_v3 2 8192 4 Standard_D4s_v3 4 16384 8
MaxDisks列(maxDataDiskCount)は後工程のデータディスク上限確認で重要になります。必ずこの段階でメモしておきましょう。3. 割り当て解除なしでサイズ変更を試みる
Standard_B2s(2コア・4GBメモリ)から Standard_B4ms(4コア・16GBメモリ)への変更を試みます。# 割り当て解除なしでリサイズ(VMは稼働中のまま) $ az vm resize --resource-group rg-linux-practice --name linuxvm-rocky94 --size Standard_B4ms { "hardwareProfile": { "vmSize": "Standard_B4ms" }, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-linux-practice/providers/Microsoft.Compute/virtualMachines/linuxvm-rocky94", "location": "japaneast", "name": "linuxvm-rocky94", ... } # 変更後のVMサイズを確認 $ az vm show --resource-group rg-linux-practice --name linuxvm-rocky94 --query hardwareProfile.vmSize -o tsv Standard_B4ms
hardwareProfile.vmSizeが変更先のサイズになっていれば成功です。無停止変更が成功した場合、VM内部のOSは特に操作不要です。変更直後に
free -h を実行すれば、メモリが増えていることを確認できます。# VM内でメモリ増加を確認(SSHで接続後) $ free -h total used free shared buff/cache available Mem: 15Gi 1.2Gi 13Gi 34Mi 1.2Gi 14Gi Swap: 0B 0B 0B
4. 割り当て解除してサイズ変更する(確実な方法)
ファミリーをまたぐ変更や、az vm list-vm-resize-optionsの一覧に含まれないサイズへの変更では、割り当て解除が必要です。また、無停止変更を試みてエラーが出た場合もこの手順を使います。注意:割り当て解除するとVMは停止し、パブリックIPアドレスが動的割り当ての場合はIPが解放されます。静的IPを使っていない場合は事前に確認してください。
# 手順1: VMを割り当て解除(停止)する $ az vm deallocate --resource-group rg-linux-practice --name linuxvm-rocky94 # コマンドが返るまで1~2分かかる # 手順2: 割り当て解除の完了を確認 $ az vm get-instance-view --resource-group rg-linux-practice --name linuxvm-rocky94 --query instanceView.statuses[*].displayStatus -o table Result ------------------ PowerState/deallocated # 手順3: 新しいサイズを指定してリサイズ $ az vm resize --resource-group rg-linux-practice --name linuxvm-rocky94 --size Standard_D4s_v3 # 手順4: VMを起動する $ az vm start --resource-group rg-linux-practice --name linuxvm-rocky94 # 手順5: VM起動を確認 $ az vm get-instance-view --resource-group rg-linux-practice --name linuxvm-rocky94 --query instanceView.statuses[*].displayStatus -o table Result ------------------ PowerState/running
Azure対応セミナーの詳細を見る >>
データディスク上限の見極め方
Azureでは、VMに接続できるデータディスクの最大数(maxDataDiskCount)がVMサイズによって決まります。スケールダウン時にこの上限を超えていると変更が拒否されます。5. 変更先サイズのデータディスク上限を確認する
特定サイズのデータディスク上限を確認するにはaz vm list-sizes を使います。# 特定サイズのデータディスク上限を確認 $ az vm list-sizes --location japaneast --query "[?name=='Standard_B4ms'].{Name:name,CPU:numberOfCores,MemMB:memoryInMb,MaxDataDisks:maxDataDiskCount}" -o table Name CPU MemMB MaxDataDisks -------------- ----- ------- ------------ Standard_B4ms 4 16384 8 # 現在のVMに接続されているデータディスク数を確認 $ az vm show --resource-group rg-linux-practice --name linuxvm-rocky94 --query "storageProfile.dataDisks[].{Name:name,Size:diskSizeGb,Lun:lun}" -o table Name Size Lun ---------------- ------ ----- linuxvm-data01 64 0 linuxvm-data02 128 1
6. 現在のデータディスク数が上限を超えている場合の対処
変更先のVMサイズの上限を超えているデータディスクは、事前にデタッチする必要があります。デタッチするとVMからはアクセスできなくなりますが、ディスク自体はAzure側に保持されます。# データディスクをデタッチする(ディスク名を指定) $ az vm disk detach --resource-group rg-linux-practice --vm-name linuxvm-rocky94 --name linuxvm-data02 # デタッチ後にVMサイズを変更 $ az vm resize --resource-group rg-linux-practice --name linuxvm-rocky94 --size Standard_B4ms # 必要であれば変更後に再アタッチ $ az vm disk attach --resource-group rg-linux-practice --vm-name linuxvm-rocky94 --name linuxvm-data02 --lun 1
lsblk でディスクが認識されているかを確認し、マウントし直してください。トラブルシュート・エラー対処
「AllocationFailed」が出たとき
(AllocationFailed) Allocation failed. We do not have sufficient capacity for the requested VM size in this region. Read more about improving likelihood of allocation success at https://aka.ms/allocation-guidance Code: AllocationFailed
・時間を空けて再試行:Azure側のキャパシティは時間帯によって変動します。数分後に再試行するだけで解消することもあります
・Availability Zoneを指定する:ゾーンを変えると別の物理クラスターに割り当てられる場合があります(ただし既存VMのゾーンは変更できないため、新規VMとしての再作成が必要)
・近いサイズに変更する:Standard_D16s_v3が不足していても Standard_D8s_v3 は空いていることがあります。段階的なスケールアップも有効です
・別リージョンへの移行:japaneastで不足している場合、japanwestでは空いていることがあります
「OperationNotAllowed」(データディスク上限超過)が出たとき
(OperationNotAllowed) The current number of Data Disks (6) exceeds the maximum number of Data Disks allowed for VM size 'Standard_B4ms' (MaxDataDiskCount = 4). Code: OperationNotAllowed
az vm disk detach を使い、上限以下になるまでデータディスクをデタッチしてからリサイズしてください。サイズ変更後にSSHで接続できないとき
割り当て解除後のVMは、起動完了まで1~3分かかります。あわてて何度もSSHを試みるより、az vm get-instance-view でPowerStateが「running」になったことを確認してからSSHを試みてください。動的パブリックIPを使っていた場合、割り当て解除によりIPが変わっています。以下で新しいIPを確認します。
# 起動後のパブリックIPを確認 $ az vm list-ip-addresses --resource-group rg-linux-practice --name linuxvm-rocky94 --query "[].virtualMachine.network.publicIpAddresses[0].ipAddress" -o tsv 20.xxx.xxx.xxx
本記事のまとめ
az vm resizeによるAzureのLinux VMサイズ変更の主要な操作をまとめます。| やりたいこと | コマンド |
|---|---|
| 現在のVMサイズを確認 | az vm show --resource-group RG --name VM --query hardwareProfile.vmSize -o tsv |
| 変更可能なサイズ一覧を取得 | az vm list-vm-resize-options --resource-group RG --name VM --output table |
| VMサイズを変更(停止なし) | az vm resize --resource-group RG --name VM --size SIZE |
| VMを割り当て解除(停止) | az vm deallocate --resource-group RG --name VM |
| VMを起動 | az vm start --resource-group RG --name VM |
| データディスク上限を確認 | az vm list-sizes --location LOC --query "[?name=='SIZE'].maxDataDiskCount" |
| データディスクをデタッチ | az vm disk detach --resource-group RG --vm-name VM --name DISK |
| VM起動後のIPを確認 | az vm list-ip-addresses --resource-group RG --name VM -o tsv |
az vm list-vm-resize-options で現在のクラスターで使えるサイズを把握し、スケールダウン時はデータディスク上限を必ず事前確認する——この2つを習慣化するだけで、現場での余計なトラブルを大幅に減らせます。次に読む記事
・AzureのVMSSとLoad Balancerで高可用性を実現する方法|スケールセット構築と自動スケーリングの実践ハンズオン
・Azure BackupでLinux VMをバックアップ・リストアする方法|Recovery Servicesコンテナーの構築と復元テスト
Azure対応セミナーの詳細を見る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AzureのVNetに複数サブネットを設計する方法|Web層・DB層の分離とNSGによるアクセス制御をazコマンドで実践
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます