御成門プログラマーの技術日記

Microsoft AzureやAngularなどの技術情報を発信します。

Azure内で余っているリソースを使用した「Azure Spot VM」でコスト割引を受けてVMを運用する

リソースのコスト最適化の選択肢の一つとして使えるVM「Azure Spot VM」を紹介します。
Azure Spot VM にどんなコスト割引があり、どのような制約があるのか、そしてどのような場面で使えるのかを実際にデプロイして試してみようと思います。

Azureの余剰リソースを使ってコスト割引を受ける Azure Spot VM とは?

まずはMicrosoft公式の Azure Spot Virtual Machines の概要説明を引用します。

Spot Virtual Machines を使用して、未使用のコンピューティング容量を大幅な割引コストで購入できます。特定の期間内に完了する必要のない、中断可能なワークロードをデプロイできます。開発、テスト、品質保証、高度な分析、ビッグ データ、機械学習、AI、バッチ ジョブ、ビデオ、グラフィックスのほか、ビデオ、グラフィックス、画像のレンダリングとコード変換のワークロードを、非常に低コストで実行できます。
Azure Spot Virtual Machines – スポット価格と特徴 | Microsoft Azure より引用

簡単にまとめると Azure Spot VMとはAzure内で使っていない余ってるリソースを使用することで割引を受けてVMを購入できる機能です。 割引率はAzure全体で使用しているリソース(SKU、リージョンによって変わる)が使われている需要によって変化します。
参考までに下記が Azure VM の Av2 Standard シリーズの2022年7月27日時点での価格表ですが、最大で84%までの割引を受けることができそうです。かなりお得ですね。

料金 - Windows Virtual Machines | Microsoft Azure

Azure Spot Virtual Machinesは大変お得ということがわかりましたが、デメリットとしてAzure内での余っているリソースがなくなると使えなくなります(割り当て解除 or 削除)。そのため公式の説明にもあったとおり、使用できるシナリオは限られてきます。
これからは実際に Azure Spot VM を作ってみようと思います。

Azure Spot VM を実際にデプロイしてみた

Spot VMの作成方法

Azure Spot VM の作成は通常のVMを作る画面から簡単にできます。「Azure Spot 割引で実行する」のチェックボックスをONにするだけです
チェックボックスをつけると、「削除の種類」、「削除ポリシー」、「1時間あたりの最大希望支払価格(米国ドル)」の項目が新しく出てくるので設定を行います。
「削除の種類」は Spot VM が削除(停止)される基準を設定することができます。「容量のみ」の場合はAzureの余剰リソースがなくなったときのみ削除(停止)されます。「価格または容量」の場合は「容量のみ」の条件に加えて、変動する割引コストが自分で設定した「1時間あたりの最大希望支払い価格」を超えた場合に削除停止されます。VMデプロイ後も変更可能です。
「削除ポリシー」 は上記の条件に達したときに仮想マシンを停止/割り当て解除するのか削除するのかを選択します。VMデプロイ後に変更できません
「削除の種類」と「削除ポリシー」の意味が逆の方がわかりやすい気がする。

↓サイズの選択画面です。「Azure Spot 割引で実行する」オプションをONにすると、サイズのコスト表記が仕様でUSドル表記になることにご注意ください。元の価格と比較しづらい.... あと注目しとくのは「削除率」の列ですかね。サイズごとに削除(停止)がどのくらいの割合で発生するのかの目安が表示されています。

「1時間あたりの最大希望支払価格(米国ドル)」の項目は「削除の種類」を「価格または容量」に設定した場合のみ入力できます。上記で説明したとおり、ここで設定した最大支払い価格を割引コストが超えた場合にVMが削除(停止)されます。VMデプロイ後も変更できます。

これでSPOT VM周りの設定は完了です。それ以外の設定項目は他のVMを作るときと同様に設定できると思います。
あとは設定をしたらあとは作成するだけです。

Spot VM 作成後にできることを確認

Spot VMの作成が完了しました。
前述したように「構成」から「削除の種類」が変更できますが、仮想マシンの割り当てが解除されてるときのみ変更できます。
仮想マシンの割り当てを解除すると↓のように変更できることを確認。

制限事項として自分が指定した「最大支払価格」をすでに上回っているサイズには変更できません。

先に「最大支払価格」を変更すれば問題なくサイズも変更できました。

Azure Spot VM のコストの見方

気になるのがAzure Spot VMのコストがどのように変動しているかだと思います。探してみたところ、価格履歴を表示する機能がありました。VMの「構成」画面から「価格履歴の表示」リンクをクリックで確認することができます。

こちらが「価格履歴」の画面です。この画面ですと日本円でもコストを確認できるんですね。あくまで設定が米国ドルである必要がありそうです。

今はなぜか2つ分のデータしかありませんが、変更が今まで2回しかなったいうことでしょうか。

実際に作って感じた Azure Spot VM を使用するシナリオ、メリットやデメリットについて

大きな割引を受けることができる Azure Spot VM ですが、その代わり下記のようなデメリットがあることがわかりました。

  • SLAがない
  • 動いて欲しいときに動く保証がない
  • 突然VMが削除(停止)される可能背がある

このデメリットはかなり大きな影響があると思うので、Spot VMを使えるシナリオは限られています。Azure Spot VM を使えるようなシナリオは下記のようなものがあると思いました。

  • テスト環境としての使用
  • 開発用の環境としての利用
  • 突然使えなくなっても問題ない環境への導入(止まっても問題ないバッチ処理など?)

とにかく可用性はないものとしてコスパよくVMを使いたい場合に最適の機能ですね。
価格が変動することに懸念を持つ方もいるかと思いますが、最大支払価格を設定できるのでコストが予想より上振れすることはないかなと思います。

(おまけ)Azure Spot VM のデプロイで発生したエラーの話

今回 Spot VMを作成しようとしたときに出会ったエラーです。VM作成直前の検証のタイミングで発生しました。

{"code":"InvalidTemplateDeployment","message":"The template deployment failed with error: 'The resource with id: '/subscriptions//resourceGroups//providers/Microsoft.Compute/virtualMachines/' failed validation with message: 'The requested size for resource '/subscriptions//resourceGroups//providers/Microsoft.Compute/virtualMachines/' is currently not available in location 'japaneast' zones '' for subscription ''. Please try another size or deploy to a different location or zones. See https://aka.ms/azureskunotavailable for details.'.'."}

こちらのエラーの原因ですが、Spot VMを作成できるオファーの種類(契約の種類)に制限事項があることが原因でした。
最初は「Visual Studio Professional 加入者」サブスクリプションで試していたのですがそれがだめだったようです。EA契約のサブスクリプションで試したら問題なくSpot VMを作成することができました。
オファーの種類の制限事項に関しての詳細は下記をご覧ください。
Azure Spot Virtual Machines を使用する - Azure Virtual Machines | Microsoft Learn

参照ページ

azure.microsoft.com

azure.microsoft.com