🐷

Azure VMのステータス遷移

2022/04/11に公開

はじめに

Azureなどのパブリッククラウドには、普通のオンプレや手元のマシンではあまり意識しない「VMのステータス」という考え方があります。
AzureのVMのステータスは、正しく理解しておかないと、思わぬ課金が発生したり、障害対応時の対応を間違えることになりますので、ここでまとめたいと思います。
※わりと基本的な観点なので、世の中に情報も色々ありますが、自分の理解と情報の整理のための再整理です。

VMのステータスと状態遷移

状態遷移

VMは以下のようなステータスを、状態遷移します。(「削除」もありますが、今回の整理上は不要かなと思い抜いてます)

(引用元)
https://docs.microsoft.com/ja-jp/azure/virtual-machines/states-billing

※意図的に引用元と図形を変えていますが、「遷移中にのみ現れる状態」と「運用中安定している状態」で使い分けています。

日本語だと「停止中」という言葉は、"stopping"と"stopped"のどちらも指す場合があるので、こういう言葉は元の言語(英語)ドキュメントで見た方が勘違いが産まれなくてよいですね。

ステータスのポイント

各ステータスは下記の意味を持っています。(引用元:上記の同一ドキュメント)
元ドキュメントだと、英語/日本語を切り替えないと分かりづらいところがあるので、一部、原文も併記しています。

状態 説明 課金
開始中 仮想マシンは起動中(powering up)です。 課金されます
実行中 仮想マシンは完全に起動(fully up)しました。 これが標準の動作状態(standard working state)です。 課金されます
停止中 これは、実行中と停止間で遷移している状態(transitional state between running and stopped)です。 課金されます
停止済み 仮想マシンはホスト上に割り当てられていますが、実行されていません(allocated on a host but not running)。 PoweredOff 状態または 停止済み (割り当て済み) とも呼ばれます。 これは、PowerOff API 操作を呼び出すか、ゲスト OS 内からシャットダウンを呼び出すことによって発生することがあります。 VM の作成中、または割り当て解除済み状態から VM を起動しているときに、停止済み状態が一時的に検出されることもあります。 課金されます
割り当て解除中 これは、実行中と割り当て解除間で遷移している状態( transitional state between running and deallocated)です。 課金されません*
割り当て解除済み Virtual Machine は、基になるハードウェアに対するリースから解放され、完全に電源が切られました(released the lease on the underlying hardware and is completely powered off)。 この状態は、停止 (割り当て解除) とも呼ばれます。 課金されません*
  • Azure のディスクやネットワークなどの一部のリソースは引き続き課金されます。

この表現から分かることは、AzureのVM利用料は「ハードウェアを占有しているかどうか」で課金の有無が変わってくる、ということです。Azure VMが物理ホスト(Hyper-Vと言われてますね)に割り当てられた場合、その最大オーバーコミット率は決まっていますから、ある物理サーバーの上に配置できるVM数には限りがあります。そのVMが居る限り、たとえ電源Offであっても他のVMを割り当てることができなくなる…という制御をしていると想像できますね。
ですので、VMを課金対象外にするためには、ただ停止するだけでなく物理サーバーへの割り当てを解除する必要があるということです。
またディスク等の他のリソースについては、VMの割り当て状態に関わらず一定の容量を確保していることから、VMの割り当てを解除しても課金が継続されるということになります。

まとめると下図のとおりです。

状態を変化させるには

さて、大事なのはこのステータスの遷移をどのように発生させるかです。
VMの操作は、ポータルなどいくつか手段がありますが、ここでは

  • PowerShell (azモジュール)
  • Azure CLI

の2パターンを見ていきます。

PowerShell

各コマンドと状態遷移は下記の通り。
オレンジの箱は、先述の通り遷移中の一時的な状態なので、1コマンド(青矢印)で通過するような表現にしています。

<参考>
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/ps-common-ref
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/tutorial-manage-vm

Azure CLI

各コマンドと状態遷移は下記の通り。
Powershellとの大きな違いの1つが、「stop」「deallocate」のコマンドが分かれているところです。

(おまけ)OS上のコマンド

ゲストOS上にて、shutdownを実行することがあると思います。
この場合は、CLIで言うところの「az vm stop」に相当しますので、ホスト上のリソースは確保したままとなります。(すなわち、利用料は課金され続けます!)
クラウドだから、平日日中だけ立ち上げて夜間休日は止めておこう…と思っても、ここを間違えると意味が無くなりますので注意しましょう!

(おまけ2)Redeploy

(おそらく細かく見ていくと「Starting」を経由したりすると思いますが)redeploy/reapplyという観点のコマンドがあります。

redeployは、別の物理サーバーに移動して再立ち上げする場合に使用するコマンド、
reapplyは、「規定した望ましい状態に合わせる」という主旨のコマンドで、場合によりVMが稼働するホストの移動なども行われます。
あまり利用することは無いかと思いますが、サポートから実施を求められたり、物理サーバーの不調を疑って切り分けのために実行するなどの場合があり得ます。
<参考>
https://jpaztech.github.io/blog/vm/vm-operation/

おわりに

VMの状態遷移と、その場合に利用するコマンドをまとめてました。
比較的世の中にも多く出回っている情報ですが、自分の理解のためにもと思いまとめ直した情報ですが、たどり着いた方のお役に立てれば幸いです。

Discussion