Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Com modelos do ARM (modelos do Azure Resource Manager), você pode implantar em grupos de recursos, assinaturas, grupos de gerenciamento ou locatários. Geralmente, as funções de modelo do ARM funcionam da mesma forma para todos os escopos. Este artigo descreve as diferenças que existem para algumas funções e como essas diferenças dependem do escopo.
Funções com suporte
Considere o seguinte ao implantar em escopos diferentes:
A
resourceGroup()função tem suporte para implantações de grupo de recursos.A
subscription()função tem suporte para implantações de grupo de recursos e assinatura.As
reference()funções e list() têm suporte para todos os escopos.Use
resourceId()para obter a ID de um recurso implantado no grupo de recursos."subnet": { "id": "[resourceId(parameters('virtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnet1Name'))]" }Use a
subscriptionResourceId()função para obter a ID de um recurso implantado na assinatura.Por exemplo, para obter a ID do recurso para uma definição de política implantada em uma assinatura, use:
"roleDefinitionId": "[subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')]"Use a
extensionResourceId()função para recursos que implementam como extensões do grupo de gerenciamento. As definições de políticas personalizadas que são implantadas no grupo de gerenciamento são extensões do grupo de gerenciamento.Para obter a ID do recurso para uma definição de política personalizada no nível do grupo de gerenciamento, use:
"policyDefinitionId": "[extensionResourceId(variables('mgScope'), 'Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"Use a
tenantResourceId()função para obter a ID de um recurso implantado no locatário. Definições de política incorporadas são recursos no nível de locatário. Ao atribuir uma política interna no nível do grupo de gerenciamento, use atenantResourceIdfunção.Para obter o ID do recurso para uma definição de política incorporada, use:
"policyDefinitionId": "[tenantResourceId('Microsoft.Authorization/policyDefinitions', parameters('policyDefinitionID'))]"
Resolução da função em escopos
Quando você implanta em mais de um escopo, as funções e subscription() as resourceGroup() funções são resolvidas de forma diferente com base em como você especifica o modelo. Quando você vincula a um modelo externo, as funções sempre são resolvidas para o escopo desse modelo. Quando você aninhar um modelo dentro de um modelo pai, use a expressionEvaluationOptions propriedade para especificar se as funções são resolvidas para o grupo de recursos e a assinatura do modelo pai ou do modelo aninhado. Defina a propriedade como inner para resolver para o escopo do modelo aninhado. Defina a propriedade como outer para resolver para o escopo do modelo pai.
A tabela a seguir mostra se as funções são resolvidas para o grupo de recursos pai ou inserido e a assinatura.
| Tipo de modelo | Scope | Resolução |
|---|---|---|
| aninhado | externo (padrão) | Grupo de recursos pai |
| aninhado | interna | Sub-grupo de recursos |
| ligado | Não aplicável | Sub-grupo de recursos |
O modelo de exemplo a seguir mostra um:
- Modelo aninhado com um escopo padrão (
outer). - Modelo aninhado com um
innerescopo. - Modelo vinculado.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2022-09-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": "2022-09-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": "2022-09-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 testar o modelo anterior e ver os resultados, use o PowerShell ou a CLI do 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
O resultado do exemplo anterior é:
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
Próximas etapas
- Para saber mais sobre como definir parâmetros em seu modelo, consulte a estrutura e a sintaxe dos modelos do ARM.
- Para obter dicas sobre como resolver erros comuns de implantação, veja como solucionar erros comuns de implantação do Azure com o Azure Resource Manager.
- Para obter informações sobre como implantar um modelo que requer um token SAS, confira como implantar um modelo do ARM privado com o token SAS.