Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Con las plantillas de Azure Resource Manager (plantillas de ARM), puede implementar en grupos de recursos, suscripciones, grupos de administración o inquilinos. Por lo general, las funciones de plantilla de ARM funcionan igual para todos los ámbitos. En este artículo se describen las diferencias que existen para algunas funciones y cómo estas diferencias dependen del ámbito.
Funciones compatibles
Tenga en cuenta lo siguiente al implementar en distintos ámbitos:
La
resourceGroup()funcionalidad es compatible para las implementaciones de grupos de recursos.La
subscription()función es compatible con las implementaciones de grupos de recursos y suscripciones.Las
reference()funciones y list() son compatibles con todos los ámbitos.Use
resourceId()para obtener el identificador de un recurso implementado en el grupo de recursos."subnet": { "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]" }Use la
subscriptionResourceId()función para obtener el identificador de un recurso implementado en la suscripción.Por ejemplo, para obtener el identificador de recurso de una definición de directiva que se implementa en una suscripción, use:
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"Usa la función
extensionResourceId()para los recursos que se implementan como extensiones del grupo de administración. Las definiciones de directivas personalizadas que se implementan en un grupo de administración son extensiones del grupo de administración.Para obtener el identificador de recurso de una definición de directiva personalizada en el nivel de grupo de administración, use:
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"Use la
tenantResourceId()función para obtener el identificador de un recurso implementado en el inquilino. Las definiciones de directivas integradas son recursos del nivel de inquilino. Al asignar una directiva integrada en el nivel de grupo de administración, use latenantResourceIdfunción .Para obtener el identificador de recurso de una definición de directiva integrada, utilice:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Resolución de funciones en ámbitos
Al implementar en más de un ámbito, las funciones resourceGroup() y subscription() se resuelven de manera diferente según cómo especifique la plantilla. Cuando se vincula a una plantilla externa, las funciones siempre se resuelven en el ámbito de esa plantilla. Al anidar una plantilla dentro de una plantilla primaria, use la propiedad expressionEvaluationOptions para especificar si las funciones se resuelven en el grupo de recursos y en la suscripción de la plantilla primaria o en la plantilla anidada. Establezca la propiedad en inner para resolver el ámbito de la plantilla anidada. Establezca la propiedad en outer para resolver el ámbito de la plantilla primaria.
En la tabla siguiente se muestra si las funciones se resuelven en el grupo de recursos y la suscripción primarios o insertados.
| Tipo de plantilla | Ámbito | Resolución |
|---|---|---|
| anidada | exterior (valor predeterminado) | Grupo de recursos primario |
| anidada | interna | Grupo de subrecursos |
| Vinculado | No disponible | Grupo de subrecursos |
En la plantilla de ejemplo siguiente se muestra un:
- Plantilla anidada con un ámbito predeterminado (
outer). - Plantilla anidada con un ámbito
inner. - Plantilla enlazada.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "defaultScopeTemplate",
"resourceGroup": "inlineGroup",
"properties": {
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"resourceGroupOutput": {
"type": "string",
"value": "[resourceGroup().name]"
}
}
}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "innerScopeTemplate",
"resourceGroup": "inlineGroup",
"properties": {
"expressionEvaluationOptions": {
"scope": "inner"
},
"mode": "Incremental",
"parameters": {},
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"resourceGroupOutput": {
"type": "string",
"value": "[resourceGroup().name]"
}
}
}
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "linkedTemplate",
"resourceGroup": "linkedGroup",
"properties": {
"mode": "Incremental",
"parameters": {},
"templateLink": {
"contentVersion": "1.0.0.0",
"uri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/resourcegroupname.json"
}
}
}
],
"outputs": {
"parentRG": {
"type": "string",
"value": "[format('Parent resource group is {0}', resourceGroup().name)]"
},
"defaultScopeRG": {
"type": "string",
"value": "[format('Default scope resource group is {0}', reference('defaultScopeTemplate').outputs.resourceGroupOutput.value)]"
},
"innerScopeRG": {
"type": "string",
"value": "[format('Inner scope resource group is {0}', reference('innerScopeTemplate').outputs.resourceGroupOutput.value)]"
},
"linkedRG": {
"type": "string",
"value": "[format('Linked resource group is {0}', reference('linkedTemplate').outputs.resourceGroupOutput.value)]"
}
}
}
Para probar la plantilla anterior y ver los resultados, use PowerShell o la CLI de Azure.
New-AzResourceGroup -Name parentGroup -Location southcentralus
New-AzResourceGroup -Name inlineGroup -Location southcentralus
New-AzResourceGroup -Name linkedGroup -Location southcentralus
New-AzResourceGroupDeployment `
-ResourceGroupName parentGroup `
-TemplateUri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crossresourcegroupproperties.json
El resultado del ejemplo anterior es:
Name Type Value
=============== ========================= ==========
parentRG String Parent resource group is parentGroup
defaultScopeRG String Default scope resource group is parentGroup
innerScopeRG String Inner scope resource group is inlineGroup
linkedRG String Linked resource group is linkedgroup
Pasos siguientes
- Para más información sobre cómo definir parámetros en la plantilla, consulte la estructura y la sintaxis de las plantillas de ARM.
- Para obtener sugerencias sobre cómo resolver errores comunes de implementación, consulte cómo solucionar errores comunes de implementación de Azure con Azure Resource Manager.
- Para obtener información sobre la implementación de una plantilla que requiere un token de SAS, consulte cómo implementar una plantilla de ARM privada con el token de SAS.