Young Leaves

Azure VMSS のSpot placement scores を試してみる

今回はMicrosoft Ignite 2024 で発表されたAzure VMSS (Virtual Machine Scale Sets) のパブリックプレビュー機能・Spot placement scores について、どのような機能かなどについて説明します。本機能はパブリックプレビュー中の機能であり、記事の内容は2024年11月24日現在出確認した内容です。今後のアップデートにより仕様が変更されることもあるため注意してください。

Azure VMSS のSpot placement scores とは

概要

Public Preview : Spot placement scores

スポットインスタンスのSpot placement scores はMicrosoft Ignite 2024 で発表されたAzure VMSS (Azure VM) のアップデートです。Spot placement scores はAzure VMSS のスポットインスタンスにおけるデプロイ成功率を示す指標であり、SKU のサイズ、リージョン、可用性ゾーン、時間帯などを高・中・低の3段階でスコアリングします。従来はスポットインスタンス利用時に「どのSKU サイズを利用すればよいか?」「どのリージョンが安定しているか?」「時間帯はどのあたりがよいか?」などの判断が課題となっていました。Spot placement scores を利用することで、VMSS におけるスポットインスタンスのデプロイ成功率向上の判断が行いやすくなります。

Spot placement scores は無料で利用できますが、Azure VMSS の機能のためAzure VM 単体でスポットインスタンスを有効にしてもスコアは表示されません。

注意点

Spot placement scores で表示されるスコアは確認時点のスコアとなります。そのため、時間帯や時間経過と共に可用性が変更される可能性があります。そのため、スポットインスタンスの作成後もVMSS の可用性に応じて現在のスコアの確認、チューニングも必要です。細かく管理を行いたい場合、Azure Automate などでスコアを確認するスクリプトを実行し、特定のSpot placement scores になったら通知を行う、時間帯に応じたスコアの平均値を取得して判断するなどの仕組みを作成してください。

Azure VMSS (VM) のスポットインスタンスは特定のSKU サイズのみサポートされているため、スポットインスタンスがサポートされていないSKU サイズではSpot placement scores は利用できません。

Azure Spot Virtual Machines を使用する

次の VM サイズは、Azure Spot Virtual Machines ではサポートされていません。

  • B シリーズ
  • 任意のサイズのキャンペーン バージョン (Dv2、NV、NC、H キャンペーン サイズなど)

Spot placement scores は2024年11月19日現在、中国拠点のリージョンでは利用できません。

Spot placement scores を表示する

Spot placement scores はAzure Portal、Azure CLI、Azure PowerShell、REST API で表示できます。

Azure Portal

Azure Portal でSpot placement scores を表示するには VMSS 作成時に Spot の項目でスポットインスタンを有効にします。有効後、希望するスポットインスタンスの情報を設定するとSpot placement scores が表示されます。

Azure CLI

Azure CLI でSpot placement scores を表示するには az compute-recommender コマンドを使います。コマンドは東日本リージョンと西日本リージョンの Standard_D2_v3 サイズについて Spot placement scores を表示します。

# Spot placement scoresを表示する
az compute-recommender spot-placement-recommender \
    --availability-zones false \
    --desired-count 1 \
    --desired-locations '["japaneast", "japanwest"]' \
    --desired-sizes '[{"sku": "Standard_D2_v3"}]' \
    --location japaneast

Azure CLI を実行すると以下のような実行結果となります。

This command is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "availabilityZones": false,
  "desiredCount": 1,
  "desiredLocations": [
    "japaneast",
    "japanwest"
  ],
  "desiredSizes": [
    {
      "sku": "Standard_D2_v3"
    }
  ],
  "placementScores": [
    {
      "isQuotaAvailable": true,
      "region": "japaneast",
      "score": "High",
      "sku": "Standard_D2_v3"
    },
    {
      "isQuotaAvailable": true,
      "region": "japanwest",
      "score": "High",
      "sku": "Standard_D2_v3"
    }
  ]
}

Azure PowerShell

Azure PowerShell でSpot placement scores を表示するには Invoke-AzSpotPlacementScore コマンドレットを使います。

# Spot placement scoresを表示する
$response =  Invoke-AzSpotPlacementScore `
    -Location 'japaneast' `
    -AvailabilityZone `
    -DesiredCount 1 `
    -DesiredLocation 'japaneast', 'japanwest' `
    -DesiredSize @{sku = "Standard_D2_v3"}
$response.PlacementScore

Azure PowerShell を実行すると以下のような実行結果となります。

AvailabilityZone IsQuotaAvailable Region    Score                     Sku
---------------- ---------------- ------    -----                     ---
1                True             japaneast RestrictedSkuNotAvailable Standard_D2_v3
2                True             japaneast High                      Standard_D2_v3
3                True             japaneast High                      Standard_D2_v3
                 True             japanwest DataNotFoundOrStale       Standard_D2_v3

REST API

REST API で表示するには以下のURL にパラメーターを表示させ実行します。実行例はWSL 上でアクセストークンの取得、REST API の実行を行います。Spot placement scores がサポートされているAPI バージョンは 2024-03-01-preview および 2024-06-01-preview です。

# アクセストークンを取得する
token=$(az account get-access-token --resource=https://management.azure.com/ --query accessToken --output tsv)

# REST APIを実行する
# サブスクリプションID、リージョン、APIバージョン、スポットインスタンスの設定は環境に合わせて設定する
curl -X POST \
  -H "Authorization: Bearer $token" \
  -H "Content-Type: application/json" \
  -d '{ 
    "desiredLocations": ["japaneast"],
    "desiredSizes": [{ 
     "sku": "Standard_D2s_v3" 
    }], 
  "desiredCount": "5",
  "availabilityZones": false
} }' \
  "https://management.azure.com/subscriptions/<SubscriptionId>/providers/Microsoft.Compute/locations/<region>/placementScores/spot/generate?api-version=<API version>"

REST API を実行すると以下のような実行結果となります。実行結果の例は見やすいように整形していますが、実際は1行で出力されます。

{
  "desiredLocations": ["japaneast"],
  "desiredSizes": [{"sku":"Standard_D2s_v3"}],
  "desiredCount": 5,
  "availabilityZones": false,
  "placementScores":[
    {
      "sku": "Standard_D2s_v3",
      "region": "japaneast",
      "score": "High",
      "isQuotaAvailable": false
    }
  ]
}

まとめ

  • Azure VMSS のSpot placement scores はスポットインスタンスのデプロイ成功率を高・中・低で表示する機能
  • Azure Portal はVMSS 作成時、Azure CLI とAzure PowerShell はVMSS 作成前にコマンド (コマンドレット)、REST API はURL にサブスクリプションID、リソースグループ、API バージョンを入力し確認する
  • Spot placement scores はあくまで実行時点のスコアなため、可用性の状況に応じて適宜チューニングが必要

参考資料