Azure CLI を使用して Azure Spot Virtual Machines をデプロイする

適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット

Azure Spot Virtual Machines を使用すると、大幅にコストを削減して未使用の容量を利用できます。 Azure で容量の回復が必要になると、Azure インフラストラクチャによって Azure Spot Virtual Machines が削除されます。 そのため、Azure Spot Virtual Machines は、バッチ処理ジョブ、開発/テスト環境、大規模なコンピューティング ワークロードなど、中断に対応できるワークロードに最適です。

Azure Spot Virtual Machines の価格は、リージョンと SKU に基づいて変動します。 詳細については、LinuxWindows の VM 価格を参照してください。

VM に対して、1 時間あたりに支払うことができる最大価格を設定するオプションがあります。 Azure スポット仮想マシンの最大価格は、小数点以下最大 5 桁を使用して米ドル (USD) で設定できます。 たとえば、0.98765 の値は、1 時間あたり $0.98765 米ドルの最大価格になります。 最大価格を -1 に設定した場合、VM は価格に基づいて削除されません。 VM の価格は、使用可能な容量とクォータがある限り、現在の Azure Spot Virtual Machine の価格または標準 VM の価格のいずれか低い方になります。 最大価格の設定の詳細については、Azure Spot Virtual Machines の価格に関するページを参照してください。

Azure CLI を使用して Azure Spot Virtual Machine を作成するプロセスは、クイックスタートの記事で詳しく説明されている内容と同じです。 '--priority Spot' パラメーターを追加し、--eviction-policy を Deallocate (既定値) または Delete に設定して、最大価格または -1 を指定するだけです。

Azure CLI のインストール

Azure Spot Virtual Machines を作成するには、Azure CLI バージョン 2.0.74 以降が実行されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。

az login を使用して Azure にサインインします。

az login

Azure Spot Virtual Machine を作成する

この例では、価格に基づいて削除されない Linux Azure Spot Virtual Machine をデプロイする方法を示しています。 この VM の割り当てを解除するように削除ポリシーが設定されているため、後で再起動することができます。 VM が削除されるときに VM と基になるディスクを削除する場合は、--eviction-policyDelete に設定します。

az group create -n mySpotGroup -l eastus
az vm create \
    --resource-group mySpotGroup \
    --name myVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys \
    --priority Spot \
    --max-price -1 \
	--eviction-policy Deallocate

VM が作成されたら、クエリを実行して、リソース グループ内のすべての VM の最大請求価格を確認できます。

az vm list \
   -g mySpotGroup \
   --query '[].{Name:name, MaxPrice:billingProfile.maxPrice}' \
   --output table

削除をシミュレートする

REST、PowerShell、または CLI を使用して、Azure スポット仮想マシンの削除をシミュレートし、突然の削除に対してアプリケーションがどの程度適切に応答するかをテストすることができます。

ほとんどの場合、アプリケーションの自動テストに役立てることができるように、REST API 仮想マシン - 削除のシミュレーションを使用します。 REST では、Response Code: 204 はシミュレートされた削除が成功したことを意味します。 シミュレートされた削除とスケジュールされたイベント サービスを組み合わせることで、VM が削除されたときにアプリケーションがどのように応答するかを自動化できます。

スケジュールされた実行中のイベントを確認するには、Azure Friday の「Azure Scheduled Events を使った VM のメンテナンスの準備」をご覧ください。

クイック テスト

シミュレートされた削除がどのように動作するかを簡単に確認するには、スケジュールされたイベント サービスに対してクエリを実行し、Azure CLI を使用して、削除をシミュレートするときに、どのように表示されるかを確認してみましょう。

スケジュールされたイベント サービスは、初めてイベントを要求したときに、サービスに対して有効になります。

VM にリモートでログインし、コマンド プロンプトを開きます。

VM のコマンド プロンプトで、次のように入力します。

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

この最初の応答には最大 2 分かかることがあります。 これ以降は、ほぼ瞬時に出力が表示されます。

(ローカル コンピューターと同様) Azure CLI がインストールされているコンピューターから、az vm simulate-eviction を使用して削除をシミュレートします。 リソース グループ名と VM 名を実際の名前に置き換えます。

az vm simulate-eviction --resource-group mySpotRG --name mySpot

要求が正常に行われた場合、応答の出力は Status: Succeeded になります。

スポット仮想マシンへのリモート接続にすぐに戻り、スケジュールされたイベントのエンドポイントに対して、もう一度クエリを実行します。 詳細情報が含まれる出力が得られるまで、次のコマンドを繰り返します。

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

スケジュールされたイベント サービスが削除通知を受け取ると、次のような応答が返されます。

{"DocumentIncarnation":1,"Events":[{"EventId":"A123BC45-1234-5678-AB90-ABCDEF123456","EventStatus":"Scheduled","EventType":"Preempt","ResourceType":"VirtualMachine","Resources":["myspotvm"],"NotBefore":"Tue, 16 Mar 2021 00:58:46 GMT","Description":"","EventSource":"Platform"}]}

"EventType":"Preempt"、およびリソースが VM リソース "Resources":["myspotvm"] であることを確認できます。

"NotBefore" を確認することで、VM がいつ削除されるかを確認することもできます。VM は指定した時刻より前に削除されないため、これはアプリケーションで正常に終了するための時間になります。

次のステップ

Azure PowerShellポータル、またはテンプレートを使用して Azure Spot Virtual Machine を作成することもできます。

Azure Spot Virtual Machine については、Azure retail prices API を使用して現在の価格情報を照会してください。 meterNameskuName の両方に Spot が含まれています。

エラーが発生した場合は、エラー コードを参照してください。