En este artículo se describe cómo resolver errores cuando una SKU no está disponible en las zonas de disponibilidad o en la región de una suscripción de Azure. Algunos ejemplos de SKU de recursos son el tamaño de la máquina virtual (VM) o los tipos de cuenta de almacenamiento. Los errores se producen durante las implementaciones con una plantilla de Azure Resource Manager (plantilla de ARM) o un archivo Bicep. El error también se produce con comandos como New-AzVM o az vm create que especifican un parámetro de size
para una SKU que no está disponible.
Cuando se implementa una máquina virtual para una SKU que no está disponible, se produce un error. Los comandos de implementación de la CLI de Azure y de Azure PowerShell muestran un mensaje de error en el que se indica que el tamaño solicitado no está disponible en la ubicación o zona. En el registro de actividad de Azure Portal, verá códigos de error SkuNotAvailable
o InvalidTemplateDeployment
.
Cuando se implementa una máquina virtual con una plantilla de ARM o un archivo Bicep para una SKU que no está disponible, se produce un error de validación. Se muestran el código de error InvalidTemplateDeployment
un mensaje de error. La implementación no se inicia, por lo que no hay ningún historial de implementación, pero el error está en el registro de actividades del portal.
Si una SKU no está disponible para la suscripción en una ubicación o zona que satisfaga sus necesidades empresariales, envíe una solicitud de SKU al soporte técnico de Azure.
Para determinar las SKU que están disponibles en una ubicación o zona, utilice el comando az vm list-skus.
az vm list-skus --location centralus --size Standard_D --all --output table
--location
filtra el resultado por ubicación.
--size
búsca por un nombre de tamaño parcial.
--all
muestra toda la información e incluye tamaños que no están disponibles para la suscripción actual.
ResourceType Locations Name Zones Restrictions
--------------- ----------- -------------- ------- --------------
virtualMachines centralus Standard_D1 1 None
virtualMachines centralus Standard_D11 1 None
virtualMachines centralus Standard_D11_v2 1,2,3 None
virtualMachines centralus Standard_D16ds_v4 1,2,3 NotAvailableForSubscription, type: Zone,
locations: centralus, zones: 1,2,3
Puede ver todos los recursos de proceso de las zonas de disponibilidad de una ubicación. De manera predeterminada, solo se muestran SKU sin restricciones. Para incluir SKU con restricciones, use el parámetro --all
.
az vm list-skus --location centralus --zone --all --output table
ResourceType Locations Name Zones Restrictions
---------------- ----------- ------------------- ------- --------------
disks centralus Premium_LRS 1,2,3 None
disks centralus Premium_LRS 1,2,3 None
virtualMachines centralus Standard_A2_v2 1,2,3 None
virtualMachines centralus Standard_D16ds_v4 1,2,3 NotAvailableForSubscription, type: Zone,
locations: centralus, zones: 1,2,3
Puede filtrar por un objeto resourceType
, como VM, para las zonas de disponibilidad.
az vm list-skus --location centralus --resource-type virtualMachines --zone --all --output table
ResourceType Locations Name Zones Restrictions
---------------- ----------- ------------------- ------- --------------
virtualMachines centralus Standard_A1_v2 1,2,3 None
virtualMachines centralus Standard_A2m_v2 1,2,3 None
virtualMachines centralus Standard_A2_v2 1,2,3 None
virtualMachines centralus Standard_D16ds_v4 1,2,3 NotAvailableForSubscription, type: Zone,
locations: centralus, zones: 1,2,3
Para determinar qué SKU están disponibles en una ubicación o zona, use el comando Get-AzComputeResourceSku.
Get-AzComputeResourceSku | Where-Object { $_.Locations -contains "centralus" }
El cmdlet Get-AzComputeResourceSku
obtiene todos los recursos de proceso. Los objetos se envían hacia abajo por la canalización y Where-Object filtra el resultado para incluir solo la ubicación especificada. Las SKU que no están disponibles para la suscripción actual se muestran como NotAvailableForSubscription
.
ResourceType Name Location Zones Restriction Capability Value
------------ ---- -------- ----- ----------- ---------- -----
disks Premium_LRS centralus {1, 3, 2} MaxSizeGiB 4
disks Premium_LRS centralus {1, 3, 2} MaxSizeGiB 128
virtualMachines Standard_A1 centralus MaxResourceVolumeMB 71680
virtualMachines Standard_A1_v2 centralus {1, 2, 3} MaxResourceVolumeMB 10240
virtualMachines Standard_D16ds_v4 centralus {1, 3, 2} NotAvailableForSubscription MaxResourceVolumeMB 614400
El siguiente script de PowerShell filtra por ubicación y SKU:
$SubId = (Get-AzContext).Subscription.Id
$Region = "centralus"
$VMSku = "Standard_D"
$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")){"NotAvailableInRegion"}else{"Available - No region restrictions applied" }
$ZoneRestriction = if ((($VMSKUs | where Name -EQ $SkuName).Restrictions.Type | Out-String).Contains("Zone")){"NotAvailableInZone: "+(((($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", "Subscription Restriction", "Zone Restriction" | Sort-Object -Property Name | Format-Table
Name Location Applies to SubscriptionID Subscription Restriction Zone Restriction
---- -------- ------------------------- ------------------------ ----------------
Standard_D1 centralus 11111111-1111-1111-1111-111111111111 Available - No region restrictions applied Available - No zone restrictions applied
Standard_D1_v2 centralus 11111111-1111-1111-1111-111111111111 Available - No region restrictions applied Available - No zone restrictions applied
Standard_D16d_v4 centralus 11111111-1111-1111-1111-111111111111 Available - No region restrictions applied NotAvailableInZone: 1,2,3
Standard_D16d_v5 centralus 11111111-1111-1111-1111-111111111111 Available - No region restrictions applied Available - No zone restrictions applied
Standard_D16ds_v4 centralus 11111111-1111-1111-1111-111111111111 Available - No region restrictions applied NotAvailableInZone: 1,2,3
Standard_D16ds_v5 centralus 11111111-1111-1111-1111-111111111111 Available - No region restrictions applied Available - No zone restrictions applied
El siguiente comando solo muestra los tamaños de máquina virtual para las zonas de disponibilidad. Las SKU que no están disponibles para la suscripción actual se muestran como NotAvailableForSubscription
.
Get-AzComputeResourceSku | Where-Object { $_.Locations -contains "centralus" -and $_.LocationInfo.Zones -ne $null -and $_.ResourceType -eq "virtualmachines" }
ResourceType Name Location Zones Restriction Capability Value
------------ ---- -------- ----- ----------- ---------- -----
virtualMachines Standard_A1_v2 centralus {1, 2, 3} MaxResourceVolumeMB 10240
virtualMachines Standard_A2m_v2 centralus {1, 2, 3} MaxResourceVolumeMB 20480
virtualMachines Standard_A2_v2 centralus {1, 2, 3} MaxResourceVolumeMB 20480
virtualMachines Standard_D16ds_v4 centralus {1, 3, 2} NotAvailableForSubscription MaxResourceVolumeMB 614400
Para determinar qué SKU están disponibles en una región, use el portal. Inicie sesión en el portal y cree un recurso de máquina virtual. Puede seleccionar un tamaño con el menú desplegable de las SKU disponibles. No es necesario completar la implementación.
Para ver otros tamaños disponibles, seleccione Ver todos los tamaños.
Puede filtrar y desplazarse por los tamaños disponibles. Cuando encuentre el tamaño de máquina virtual que desea usar, elija Seleccionar.
Para determinar qué SKU están disponibles en una ubicación, use la operación Resource Skus - List.
Puede usar az rest para ejecutar la operación de lista. Reemplace <subscription ID>
, incluidos los corchetes angulares con el id. de suscripción. El resultado es un conjunto de datos grande que puede guardar en un archivo JSON.
az rest --method get --uri https://management.azure.com/subscriptions/<subscription ID>/providers/Microsoft.Compute/skus?api-version=2021-07-01 --output-file .\sku-list.json
El comando devuelve SKU y ubicaciones disponibles en formato JSON:
{
"resourceType": "virtualMachines",
"name": "Standard_A1_v2",
"tier": "Standard",
"size": "A1_v2",
"family": "standardAv2Family",
"locations": [
"centralus"
],
"locationInfo": [
{
"location": "centralus",
"zones": [
"1",
"2",
"3"
],
"zoneDetails": []
}
],
"capabilities": [
{
"name": "MaxResourceVolumeMB",
"value": "10240"
},
{
"name": "OSVhdSizeMB",
"value": "1047552"
},
{
"name": "vCPUs",
"value": "1"
}
],
"restrictions": []
}