はじめに
オンデマンド容量予約を買ってみたのでメモ
そもそもの実装
オンデマンド容量予約は「容量予約グループ」と「容量予約」の2つで構成されています。容量予約グループの中に、仮想マシンのサイズごとの容量予約を作るという関係性です。1つの容量予約グループの中には、仮想マシンのサイズの異なる容量予約を複数入れられます。
仮想マシンに紐づけるのは容量予約グループです。仮想マシンと容量予約グループを紐づける際には、容量予約グループの中に仮想マシンと同じサイズの容量予約が存在している必要があります。ただし、容量予約の数量はゼロでも良いです。つまり、次のような構成を組むことはできます。

数量ゼロの容量予約
容量予約グループを作る際には、ゾーン指定とゾーン未指定を選ぶ必要があります。ゾーン未指定の容量予約グループはゾーン未指定の仮想マシンにのみ紐づけられます。ゾーン指定の容量予約グループは、同じゾーン上の仮想マシンにのみ紐づけられます。
オンデマンド容量予約を削除するためには、中に入っている容量予約を全て削除する必要があります。容量予約を削除するためには、該当の容量予約と同じサイズの仮想マシンと容量予約グループの紐づけを削除する必要があります。
注意点
クォータの用意
オンデマンド容量予約を利用するためには、容量を予約する仮想マシンのシリーズのクォータが必要です。例えば東日本に D2as_v5 の容量予約を10個作りたい場合には、東日本リージョンに Das_v5 シリーズの vCPU のクォータが20個必要です。もし 東日本の Das_v5 の vCPU クォータを10個持っており、既に D2as_v5 の仮想マシンが4台起動している場合、空きクォータは 2 vCPU になりますので、作成できる D2as_v5 の容量予約は1つだけです。

クォータ消費のイメージ その1
D2as_v5の容量予約を2つ作成しようとしても、トータルの vCPU が12(起動分 2 vCPU ×4台 + 容量予約分 2 vCPU ×2)になってしまいクォータが不足するため処理を進められません。4台の D2as_v5 用容量予約を一気に用意したい場合には、Das_v5 の vCPU のクォータが16個必要になります。

クォータ消費のイメージ その2
一方で、容量予約グループを仮想マシンに割り当てて容量予約が利用されると、容量予約を作成する際に増えた vCPU クォータは減ります。例えば D2as_v5 が4台、D2as_v5 の容量予約が1つの状態の vCPU クォータは10です。

クォータ消費のイメージ その3
この容量予約グループを D2as_v5 の仮想マシンに割り当てると、D2as_v5の容量予約が利用されて Das_v5 の vCPU クォータは10から8に減ります。

クォータ消費のイメージ その4
この仕様を利用して、現在の空きクォータを利用して、全ての仮想マシンに対して順番に容量予約を紐づけることもできます。東日本の Das_v5 の vCPU クォータを10個持っており、既に D2as_v5 の仮想マシンが4台起動している場合、次のような段取りを4台目まで繰り返すことになります。
- 2vCPU の空きクォータを利用して D2as_v5 の容量予約の数量が1の容量予約グループを作成する。vCPU のクォータは一時的に10になる
- 容量予約グループを 1台目の D2as_v5 の仮想マシンに紐づける。vCPU のクォータが8に戻る
- 2vCPU の空きクォータを利用して D2as_v5 の容量予約の数量を2にする。vCPU のクォータは再び10になる
- 容量予約グループを 2台目の D2as_v5 の仮想マシンに紐づける。vCPU のクォータが8に戻る
容量予約グループを紐づけられる条件
仮想マシンと容量予約グループを紐づけられる・仮想マシンと容量予約グループの紐づきを解除できるのには条件があります。2025年5月現在、動作確認した限りでは、仮想マシンがゾーン指定かどうかによって挙動が変わります。ポータル上では「容量予約グループを更新できるのは、リージョン仮想マシンの割り当てが解除されている場合、または容量予約の予約済み数量が 0 の場合のみです。」という記載がありますが、現時点で試した限りでは次の通りでした。
- 仮想マシンがゾーン未指定
- 仮想マシンが割り当て解除状態の場合のみ、ゾーン未指定の容量予約を紐づけられる。容量予約の数量がゼロかどうかは関係ない
- 数量がゼロの容量予約グループに限り、仮想マシンが起動状態であっても紐づけを解除できる。数量がゼロでない場合は、割り当て解除が必要
- 仮想マシンがゾーン指定
- 数量がゼロかどうかに関係なく、起動状態であっても同じゾーン指定の容量予約を紐づけられる
- 数量がゼロかどうかに関係なく、仮想マシンが起動状態の場合には容量予約の紐づけを解除できない。解除するためには割り当て解除が必要。
容量予約がサポートしない機能
サポートしていない機能を利用する仮想マシンにオンデマンド容量グループを割り当てることはできません。例えば、休止状態が有効になっている仮想マシンにオンデマンド容量予約を紐づけようとすると、次にようにエラーになります。

休止状態が有効な仮想マシンに容量予約グループを紐づけようとしたときのエラー
2025年5月現在、ドキュメント上でサポートされていない機能は以下の通り。昔からの Azure ユーザだと、可用性セットがつらい。
- スポット VM
- Azure Dedicated Host ノード、または専用ホストにデプロイされた VM
- 可用性セット
- 近接配置グループ
- 更新ドメイン
- 1 つの配置グループを true に設定した Virtual Machine Scale Sets
- Azure Ultra Disk Storage (旧称 UltraSSD)
- 休止状態から再開する VM
- 仮想ネットワーク暗号化を必要とする VM
これらの機能を利用している場合には、容量予約を紐づける前に仮想マシンの構成を変更する必要があります。対象の機能によっては、構成変更時に仮想マシンの割り当て解除、または再構築が必要になります。
容量予約を利用する順序
上記の通り、ゾーン未指定の仮想マシンに容量予約を紐づける場合には起動中の仮想マシンを割り当て解除する必要があります。また、容量予約を割り当てるために仮想マシンの構成を変更する際にも割り当て解除が必要になる場合があります。
割り当て解除を伴う作業では全体の順序がとても大事です。次のように、容量予約を作成する前に仮想マシンを割り当て解除してしまうと、容量予約を作成してリソースを確保する前に、仮想マシンを起動することで確保していたリソースを手放してしまいます。もし、作業を実施しているタイミングで Azure で特定 SKU の利用が急騰して容量予約を作成できなかった場合には、停止した仮想マシンを起動できなくなる可能性があります。
- 仮想マシンを割り当て解除する
- 仮想マシンと同じサイズの容量予約を作成する
- 仮想マシンと容量予約グループを紐づける
- 仮想マシンを起動する
そのため、仮想マシンの起動を最優先とする場合には、次の順序で作業を行う必要があります。
- 仮想マシンと同じサイズの容量予約を作成する
- 仮想マシンを割り当て解除する
- 仮想マシンと容量予約グループを紐づける
- 仮想マシンを起動する
ただし、この場合、容量予約を作成した後から仮想マシンへの紐づけが完了するまでの間、仮想マシンの料金と容量予約の料金が二重で発生してしまいます。容量予約グループを紐づけるサーバの重要度や、作業タイミングを踏まえて、どちらの手法を採用するか決める必要があります。
まとめ
オンデマンド容量予約を触ったときに気になった点をまとめました。利用できる機能やサイズに制限があるので少し厄介ではありますが、ゾーン冗長で構成されており常時起動している一般的なサイズの仮想マシンであれば、保険のために容量予約を標準で買ってしまっても良いのではと思いました。
Note
- 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
- 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
- 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。