Azure 仮想マシンの休止機能 (VM Hibernate) とは

# はじめに

2023 年 11 月に、仮想マシンの休止状態 (VM Hibernate) のパブリック プレビューが発表されました。

https://azure.microsoft.com/ja-jp/updates/public-preview-vm-hibernation/?wt.mc_id=AZ-MVP-5003113


# 仮想マシンの休止機能とは

仮想マシンを休止状態にすると、メモリ内の状態を OS ディスクに保存し、仮想マシンの割り当てを解除します。
その後、仮想マシンを起動すると、休止状態前に実行されていたアプリとプロセスが以前の状態から再開できます。 

都合によって検証などの作業を中断せざるを得ない時にこの機能を使うと、中断したところから作業を再開できるのでとても便利ですね :thumbsup:
さらに、休止状態の間は **コンピューティング コストがかからない** のも素敵です :heart_eyes:

https://techcommunity.microsoft.com/t5/azure-compute-blog/reduce-compute-costs-by-pausing-vms-now-in-public-preview/ba-p/3981127?wt.mc_id=AZ-MVP-5003113

また、上記のブログでは、仮想デスクトップサービスである「Azure Virtual Desktop (Personal Desktop Autoscale)」や「Citrix DaaS for Azure」でもこの仮想マシンの休止機能を利用できると紹介しています。

なお、この機能の利用は、特定の VM サイズと OS バージョンに制限されています。
また、 **既存の仮想マシンで休止機能を有効にすることができない** などの制限があります。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113


# はじめる前に

仮想マシンの休止機能を利用するためには、この投稿の執筆時点では、サブスクリプションのプレビュー機能で「Hibernation Preview」を登録する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/401c2068-382a-b413-20c7-26e598f6e58a.png)

この他にも、仮想マシンの休止機能を利用するための[前提条件](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113#prerequisites-to-use-hibernation)があるので、確認しておきましょう。


# 仮想マシンを作成する

いつもどおり、手順に従って仮想マシンを作成すれば良いですが、以下のようにサポート対象外の OS バージョンや VM サイズを選択すると、休止状態を有効にすることができません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/96d01af8-a2df-4678-fbdb-96a91a7227d0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ac580504-dca6-d70d-3e50-984505ff3f9a.png)

サポートされている OS バージョン ([Linux](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113&tabs=osLimitsLinux%2CenablehiberPortal%2CcheckhiberPortal%2CenableWithPortal%2CcliLHE%2CUbuntu18HST%2CPortalDoHiber%2CPortalStatCheck%2CPortalStartHiber%2CPortalImageGallery#supported-linux-versions) / [Windows](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113&tabs=osLimitsWindows%2CenablehiberPortal%2CcheckhiberPortal%2CenableWithPortal%2CcliLHE%2CUbuntu18HST%2CPortalDoHiber%2CPortalStatCheck%2CPortalStartHiber%2CPortalImageGallery#supported-windows-versions)) と [VM サイズ](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113#supported-vm-sizes)を選択しましょう。
※この投稿では、Windows Server で作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/1b5a7b42-4b61-f018-02da-64558b2eecb6.png)

デプロイが完了すると、拡張機能に「AzureHibernateExtension」が追加されます。
※Linux の場合は「LinuxHibernateExtension」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/d2eeb687-c122-e384-af70-5c705c51fcca.png)


## 休止機能を検証する

仮想マシン (Windows) にリモートデスクトップ接続して、動作確認してみます。

仮想マシンで、Edge を開き (念のため、InPrivate ウインドウを開く)、Qiita と X にログインした状態で、リモートデスクトップ接続のセッションを切断します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/b7d3a640-9b6d-9233-d168-854089407214.png)

次に、Azure ポータルで該当の仮想マシンを開き、休止状態にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/233863ce-ac6b-9496-0c9d-883489fcad6b.png)

すると、仮想マシンの状態が **「休止状態になりました (割り当て解除済み)」** になりました。
「割り当て解除済み」なので、仮想マシンのリソースが解放されている (＝コンピューティング課金なし) ということですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/9b082f56-76b1-fd28-e6a6-ce3c6f7bd063.png)

それでは、再び仮想マシンを開始して、仮想マシンにリモートデスクトップ接続します。
すると、休止状態前と同じように Qiita と X にログインしたままの Edge が表示されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/dce07f7a-40dc-b40c-0961-045fb0460997.png)

このように、仮想マシンの休止機能を使えば、「割り当て解除済み」状態になっても、起動後に作業が再開できることが分かります。


# 制限事項を確認する

[一般的な制限事項](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113#general-limitations)に記載されている「VM サイズの変更」と「ディスクの変更」について試してみます。


## VM サイズの変更

[一般的な制限事項](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113#general-limitations)には、

> 休止機能が有効になっている場合、VM のサイズを変更することはできません。

と記載されています。

仮想マシンのサイズを変更しようと試みましたが、 **「仮想マシンで休止状態が有効になっている間のサイズ変更は、現在サポートされていません。」** と表示されています。
また、現在と異なるサイズ (休止機能がサポートされているサイズ) を選択して下部にある [サイズの変更] をクリックしても非アクティブなので、クリックできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/2619e39a-8bbb-c650-0ee3-a2f38fd17bb2.png)

また、

> VM で休止機能をいったん有効にしたら、無効にすることはできません。

とも記載されているので、もうこの仮想マシンのサイズを変更することができないようですね。


## ディスクの変更

[一般的な制限事項](https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume?wt.mc_id=AZ-MVP-5003113#general-limitations)には、

> VM が休止状態になっているときは、VM に関連付けられているディスクまたは NIC をアタッチ、デタッチ、または変更することはできません。 代わりに、VM を Stop-Deallocated 状態に移動する必要があります。

と記載されています。

仮想マシンを「休止状態になりました (割り当て解除済み)」状態にして、OS ディスクのスワップとデータディスクの追加を試みましたが、双方ともできませんでした。

- **OS ディスクのスワップ (Status : Hibernated-Deallocated)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/cc03454a-c0c4-1fb6-9024-150bdd3576d5.png)

- **データディスクの追加 (Status : Hibernated-Deallocated)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/052b308f-f221-4efd-152c-d6505b2711e4.png)

ただし、一般的な制限事項に記載されているとおり、仮想マシンを「停止済み (割り当て解除)」状態にすることで、OS ディスクのスワップとデータディスクの追加は問題なくできます。

- **OS ディスクのスワップ (Status : Stop-Deallocated)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/7fd42187-a805-e1bf-a2ce-c03e74ee774f.png)

- **データディスクの追加 (Status : Stop-Deallocated)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/a9477230-74a1-2f51-8336-5690f780819f.png)

ディスクや NIC については、心配事は無さそうですね。


# まとめ

仮想マシンで作業を中断する際は、今までは「停止済み (割り当て解除)」状態にせざるを得ませんでしたが、休止機能を利用することで休止状態の前から再開できるのはとても便利だと感じますし、休止状態の間はコンピューティングの課金が発生しないのもとても魅力的です。

ただ、仮想マシンの休止機能を有効にすることでサイズを変更することができなくなってしまうので、事前にどのサイズを利用するか十分に検討する必要があります。

また、この投稿ではブラウザーを用いた簡単な検証を行いましたが、休止状態から再び仮想マシンを起動するのに十分な OS ディスクの容量が必要です。よって、仮想マシンで実行される RAM (休止する際に保存されるメモリ内の状態を書き込む)、OS、アプリの内容を格納するのに十分な容量についても検討する必要があります。

以上のように検証してその所感を書いてみましたが、
仮想マシンの休止機能は、メリットのほうが大きいので、いろいろな利用シーンで活用できると感じます。

コマッタときは、トラブルシューティングをご覧ください。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/hibernate-resume-troubleshooting?wt.mc_id=AZ-MVP-5003113