Azure VMをシャットダウンしても課金が止まらない原因と割り当て解除手順

Azure Virtual MachinesでWindowsやLinuxをシャットダウンしたのに課金が続く場合、原因の多くはOSだけが停止し、Azure上のコンピュート資源が割り当てられたままになっていることです。

確認すべき状態は「Stopped」ではなく、**「Stopped (deallocated)/停止済み(割り当て解除)」**です。必要な停止承認を取り、データや処理を安全に保存したうえで、Azureポータルから割り当て解除を伴う停止を実行するか、Azure CLIでaz vm deallocateを実行します。

ただし、割り当て解除によって止まるのは主にVMのコンピュート料金です。ディスクや一部のネットワーク資源などは引き続き料金が発生する可能性があるため、請求総額が必ず0円になるわけではありません。([Microsoft Learn][1])

目次

Azure VMを停止したのに課金が続く理由と割り当て解除の確認

Azure VMには、大きく分けて次の2種類の状態があります。

  • VM内部のWindowsやLinuxが動作しているかを示す状態
  • Azure側で物理ホスト上のコンピュート資源が割り当てられているかを示す状態

OSのスタートメニューやshutdownコマンドからシャットダウンすると、OSは停止します。しかし、Azure側ではVMがホストに割り当てられたままになることがあります。

この状態が「Stopped」です。VMは動作していませんが、Azure上のコンピュート資源が確保されているため、VMインスタンスの料金は継続します。

StoppedとStopped (deallocated)の違い

Azure上の状態VMの状況コンピュート料金
RunningVMが実行中発生する
Stopping停止処理中発生する
StoppedOSは停止しているが、ホスト上の資源は割り当て済み発生する
Deallocating割り当て解除処理中原則として発生しない
Stopped (deallocated)VMが停止し、ホスト上の資源も割り当て解除済み原則として発生しない

Microsoftの説明では、Stoppedは「PoweredOff」または「Stopped (Allocated)」とも呼ばれます。一方、Deallocatedは、基盤となるハードウェアの割り当てが解放された状態です。([Microsoft Learn][1])

つまり、課金を判断するときの基準は「OSが停止したか」ではありません。Azureのコンピュート資源が割り当て解除されたかを確認する必要があります。

az vm stopとaz vm deallocateは動作が異なる

Azure CLIには、似た名前のコマンドがあります。

az vm stop -g <resource-group> -n <vm-name>

az vm stopはVMの電源を停止しますが、コンピュート資源の割り当てを解除するコマンドではありません。

課金対象となる割り当てを解除するには、次のコマンドを使用します。

az vm deallocate -g <resource-group> -n <vm-name>

az vm deallocateを実行すると、コンピュート資源の割り当てが解除され、状態がStoppedからStopped (Deallocated)へ変わります。([Microsoft Learn][2])

Azure VMの割り当てを解除する手順

業務サーバーや共有環境では、いきなりコマンドを実行せず、停止による影響を確認してから進めます。

停止前に必要な確認を行う

最低限、次の項目を確認します。

  • サーバー停止の承認を得ているか
  • 利用者や関係部署への連絡が済んでいるか
  • 編集中のファイルや未保存データがないか
  • データベースのトランザクションやバッチ処理が動いていないか
  • アプリケーションやミドルウェアを正常終了できるか
  • 再起動後の確認手順が決まっているか
  • 対象のサブスクリプション、リソースグループ、VM名が正しいか

特にデータベースや業務アプリケーションでは、VMを直接停止する前に、アプリケーション側のサービスを正常終了しておくほうが安全です。

Azureポータルで現在の状態を確認する

Azureポータルから確認する場合は、対象のVMリソースを開き、[概要]などの画面に表示される状態を確認します。

表示される状態判断
実行中/RunningVMのコンピュート料金が発生している
停止済み/StoppedOSは停止しているが、コンピュート料金が続く可能性がある
停止済み(割り当て解除)/Stopped (deallocated)コンピュート資源は割り当て解除されている

画面の表記や配置は、Azureポータルの更新、アカウントの種類、権限によって異なる場合があります。単に「停止」と表示されているかではなく、「割り当て解除」まで含まれているかを確認してください。

Instance Viewで実際の電源状態を確認する

Azure CLIを利用できる場合は、Instance Viewから電源状態を確認できます。

az vm get-instance-view \
  -g <resource-group> \
  -n <vm-name> \
  --query "instanceView.statuses[?starts_with(code, 'PowerState/')].[code,displayStatus]" \
  -o table

Windowsのコマンドプロンプトなどで複数行入力が難しい場合は、1行で実行します。

az vm get-instance-view -g <resource-group> -n <vm-name> --query "instanceView.statuses[?starts_with(code, 'PowerState/')].[code,displayStatus]" -o table

結果は、次のように判断します。

コード状態
PowerState/running実行中
PowerState/stopped停止しているが、割り当て済み
PowerState/deallocating割り当て解除処理中
PowerState/deallocated割り当て解除済み

az vm get-instance-viewは、VMのインスタンス情報を取得するAzure CLIコマンドです。配列の固定位置ではなく、PowerState/で始まるコードを抽出すると、プロビジョニング状態と電源状態を区別しやすくなります。([Microsoft Learn][3])

Azureポータルから割り当て解除する

Azureポータルを利用する場合は、対象VMの画面から[停止]を実行します。

実行前に、確認ダイアログの内容を読み、VMの停止だけでなくコンピュート資源の割り当て解除が行われることを確認してください。OS内ですでにシャットダウンしていても、状態がStoppedのままであれば、Azure側から停止操作を実行する必要があります。

操作後は画面を更新し、最終的に次の状態になったことを確認します。

Stopped (deallocated)

または、日本語表示では次のような表記です。

停止済み(割り当て解除)

Azure CLIから割り当て解除する

対象のリソースグループとVM名を確認したうえで、次のコマンドを実行します。

az vm deallocate -g <resource-group> -n <vm-name>

具体例は次のとおりです。

az vm deallocate -g rg-production -n vm-web-01

手動作業では、処理完了前にコマンドが終了する--no-waitを付けずに実行するほうが確認しやすくなります。

複数のAzureサブスクリプションを利用している場合は、誤ったサブスクリプションの同名VMを操作しないように注意してください。

割り当て解除後に状態を再確認する

コマンドが正常終了しても、必ずInstance ViewまたはAzureポータルで状態を再確認します。

az vm get-instance-view \
  -g <resource-group> \
  -n <vm-name> \
  --query "instanceView.statuses[?starts_with(code, 'PowerState/')].[code,displayStatus]" \
  -o table

結果に次のコードが含まれていれば、コンピュート資源は割り当て解除されています。

PowerState/deallocated

コマンドがエラーになった場合や状態が変わらない場合は、次の項目を確認します。

  • リソースグループ名とVM名に誤りがないか
  • 対象サブスクリプションが正しいか
  • 停止操作に必要な権限を持っているか
  • Azureポータルのアクティビティログに失敗が記録されていないか
  • VMが単体VMではなく、Virtual Machine Scale Setsのインスタンスではないか
  • ポリシーや自動化処理によって再起動されていないか

ProvisioningStateのSucceededを停止完了の証拠にしない

Azure VMでは、プロビジョニング状態と電源状態が別々に管理されています。

ProvisioningStateは、VMリソースに対して行われた直近のコントロールプレーン操作が成功したかを示す情報です。

provisioningState: Succeeded

この表示は「直近の操作が成功した」という意味であり、VMが停止していることや、コンピュート資源が割り当て解除されたことを意味しません。

確認項目分かること
ProvisioningState/Succeeded直近のリソース操作が成功した
PowerState/stoppedVMは停止しているが、割り当て済み
PowerState/deallocatedVMが停止し、コンピュート資源も割り当て解除済み

課金状態を確認するときは、ProvisioningStateではなく、Instance View内のPowerStateを確認します。Microsoftのドキュメントでも、プロビジョニング状態はVMの電源状態とは別の情報として説明されています。([Microsoft Learn][1])

割り当て解除しても残る可能性がある料金

Stopped (deallocated)になれば、VMインスタンスのコンピュート料金は原則として発生しなくなります。

ただし、VMに関連するすべての料金が停止するわけではありません。

OSディスクとデータディスク

VMを停止しても、OSディスクやデータディスクにはデータが保存されています。ディスク資源が存在する限り、その種類や容量に応じた料金が発生する可能性があります。

特に、利用していない検証用VMに大容量または高性能なディスクを接続したままにしていると、VM本体を割り当て解除しても一定の料金が残ります。

一部のネットワーク資源

VMに関連付けたネットワーク資源も、構成によっては料金が残る場合があります。

「VMを止めたのに請求が0円にならない」ときは、VM本体だけでなく、ディスクやネットワーク関連資源を個別に確認してください。Microsoftも、VMが割り当て解除済みであっても、ディスクやネットワークなど一部のAzure資源では料金が継続すると説明しています。([Microsoft Learn][1])

VMのコンピュート料金と関連資源の料金を分けて確認する

請求内容を確認するときは、単に「Azure Virtual Machinesの料金が残っている」と判断せず、リソースやメーターを分けて確認します。

確認の考え方は次のとおりです。

確認対象主な確認内容
VMインスタンス割り当て解除後もコンピュート使用量が記録されていないか
OSディスクディスクの種類と容量が適切か
データディスク未使用のディスクが接続されたままになっていないか
ネットワーク資源VM停止後も保持している有料資源がないか
同一リソースグループ別のVMや関連資源が稼働していないか

VMの状態確認と請求明細の確認を分けて行うことが重要です。

よくある間違いと正しい判断

よくある判断実際の扱い
Windowsをシャットダウンしたので課金も止まったStoppedのままならコンピュート料金が続く
ポータルに「停止」と表示されたので問題ない「割り当て解除」が含まれているか確認する
az vm stopを実行したので割り当て解除された割り当て解除にはaz vm deallocateを使う
ProvisioningStateSucceededなので停止済み電源状態とは別の情報
コマンドがエラーなく終了したので確認不要Instance ViewでPowerState/deallocatedを確認する
割り当て解除すれば請求総額が0円になるディスクや一部ネットワーク資源の料金は残り得る

Azure VMの課金を確実に止めるための確認手順

OSをシャットダウンしただけでは、Azure VMのコンピュート料金が止まらないことがあります。

まずAzureポータルまたはInstance Viewで現在の状態を確認し、Stoppedであれば、必要な停止承認とデータ保存を済ませてから割り当て解除を実行します。

az vm deallocate -g <resource-group> -n <vm-name>

実行後は、次の状態を必ず確認してください。

PowerState/deallocated

または次のポータル表示です。

Stopped (deallocated)

そのうえで請求が残っている場合は、VM本体のコンピュート料金ではなく、OSディスク、データディスク、一部のネットワーク資源などの料金を個別に確認します。
[1]: https://learn.microsoft.com/en-us/azure/virtual-machines/states-billing “States and billing status – Azure Virtual Machines | Microsoft Learn”
[2]: https://learn.microsoft.com/en-us/cli/azure/vm?view=azure-cli-latest “az vm | Microsoft Learn”
[3]: https://learn.microsoft.com/ja-jp/cli/azure/vm?view=azure-cli-latest&utm_source=chatgpt.com “az vm”

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次