解决 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。 不需要完成部署。
例如,开始创建虚拟机的过程。 若要查看其他可用的大小,请选择“更改大小” 。
可以筛选和滚动到可用的大小。
解决方案 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": []
},
...
]
}