解决 SKU 不可用的错误

本文介绍如何解决 SkuNotAvailable 错误 。 如果在该区域或满足业务需求的备用区域中找不到合适的 SKU,请将 SKU 请求提交到 Azure 支持。

症状

在部署资源(通常为虚拟机)时,收到以下错误代码和错误消息:

Code: SkuNotAvailable
Message: The requested tier for resource '<resource>' is currently not available in location '<location>'
for subscription '<subscriptionID>'. Please try another tier or deploy to a different location.

原因

当所选的资源 SKU(如 VM 大小)不可用于所选的位置时,会收到此错误。

解决方案 1 - PowerShell

要确定区域中可用的 SKU,请使用 Get-AzComputeResourceSku 命令。 按位置筛选结果。 必须拥有最新版本 PowerShell 才能运行此命令。

Get-AzComputeResourceSku | where {$_.Locations -icontains "chinaeast2"}

结果包括位置的 SKU 列表以及针对该 SKU 的任何限制。 请注意,SKU 可能被列为 NotAvailableForSubscription

ResourceType          Name           Locations   Zone      Restriction                      Capability           Value
------------          ----           ---------   ----      -----------                      ----------           -----
virtualMachines       Standard_A0    chinaeast2             NotAvailableForSubscription      MaxResourceVolumeMB   20480
virtualMachines       Standard_A1    chinaeast2             NotAvailableForSubscription      MaxResourceVolumeMB   71680
virtualMachines       Standard_A2    chinaeast2             NotAvailableForSubscription      MaxResourceVolumeMB  138240

若要按位置和 SKU 进行筛选,请使用:

$SubId = (Get-AzContext).Subscription.Id

$Region = "chinaeast2" # change region here
$VMSku = "Standard_M" # change VM SKU here

$VMSKUs = Get-AzComputeResourceSku | where {$_.Locations.Contains($Region) -and $_.ResourceType.Contains("virtualMachines") -and $_.Name.Contains($VMSku)}

$OutTable = @()

foreach ($SkuName in $VMSKUs.Name)
        {
            $LocRestriction = if ((($VMSKUs | where Name -EQ $SkuName).Restrictions.Type | Out-String).Contains("Location")){"NotAvavalableInRegion"}else{"Available - No region restrictions applied" }
            $ZoneRestriction = if ((($VMSKUs | where Name -EQ $SkuName).Restrictions.Type | Out-String).Contains("Zone")){"NotAvavalableInZone: "+(((($VMSKUs | where Name -EQ $SkuName).Restrictions.RestrictionInfo.Zones)| Where-Object {$_}) -join ",")}else{"Available - No zone restrictions applied"}

            $OutTable += New-Object PSObject -Property @{
                                                         "Name" = $SkuName
                                                         "Location" = $Region
                                                         "Applies to SubscriptionID" = $SubId
                                                         "Subscription Restriction" = $LocRestriction
                                                         "Zone Restriction" = $ZoneRestriction
                                                         }
         }

$OutTable | select Name, Location, "Applies to SubscriptionID", "Region Restriction", "Zone Restriction" | Sort-Object -Property Name | FT

该命令将返回类似下面的结果:

Name                   Location  Applies to SubscriptionID            Region Restriction                         Zone Restriction                        
----                   --------  -------------------------            ------------------------                   ----------------     
Standard_M128          chinaeast2 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Available - No region restrictions applied Available - No zone restrictions applied
Standard_M128-32ms     chinaeast2 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Available - No region restrictions applied Available - No zone restrictions applied
Standard_M128-64ms     chinaeast2 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Available - No region restrictions applied Available - No zone restrictions applied

解决方案 2 - Azure CLI

要确定区域中可用的 SKU,请使用 az vm list-skus 命令。 使用 --location 参数可按位置筛选输出。 使用 --size 参数按部分大小名称搜索。 使用 --all 参数显示所有信息,包括对当前订阅不可用的大小。

必须具备 Azure CLI 2.15.0 或更高版本。 要检查版本,请使用 az --version。 如果需要,请更新安装

az vm list-skus --location chinaeast2 --size Standard_F --all --output table

该命令将返回类似下面的结果:

ResourceType     Locations       Name              Zones    Restrictions
---------------  --------------  ----------------  -------  --------------
virtualMachines  chinaeast2       Standard_F1                None
virtualMachines  chinaeast2       Standard_F2                None
virtualMachines  chinaeast2       Standard_F4                None
...
...

解决方案 3 - Azure 门户

要确定区域中可用的 SKU,请使用门户。 登录到门户,并通过接口添加资源。 设置值时,可看到该资源的可用 SKU。 不需要完成部署。

例如,开始创建虚拟机的过程。 若要查看其他可用的大小,请选择“更改大小” 。

Create VM

可以筛选和滚动到可用的大小。

Available SKUs

解决方案 4 - REST

要确定区域中可用的 SKU,请使用资源 Sku - 列表操作。

它会以下列格式返回可用 SKU 和区域:

{
  "value": [
    {
      "resourceType": "virtualMachines",
      "name": "Standard_A0",
      "tier": "Standard",
      "size": "A0",
      "locations": [
        "chinaeast2"
      ],
      "restrictions": []
    },
    {
      "resourceType": "virtualMachines",
      "name": "Standard_A1",
      "tier": "Standard",
      "size": "A1",
      "locations": [
        "chinaeast2"
      ],
      "restrictions": []
    },
    ...
  ]
}