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.
En este artículo se describe cómo definir el ámbito de la implementación en un grupo de recursos. Use una plantilla de Azure Resource Manager (plantilla de ARM) para la implementación. En el artículo también se muestra cómo expandir el ámbito más allá del grupo de recursos en la operación de implementación.
Sugerencia
Se recomienda Bicep porque ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para obtener más información, consulte Implementaciones de grupos de recursos.
Recursos compatibles
La mayoría de los recursos se pueden implementar en un grupo de recursos. Para obtener una lista de los recursos disponibles, vea Referencia de plantillas de Resource Manager.
Esquema
Para las plantillas, utilice el siguiente esquema:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
...
}
Para los archivos de parámetros, use:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
...
}
Comandos de implementación
Para implementar en un grupo de recursos, use los comandos de implementación de grupos de recursos.
Para la CLI de Azure, use az deployment group create. El ejemplo siguiente implementa una plantilla para crear un grupo de recursos: El grupo de recursos que especifique en el parámetro --resource-group
es el grupo de recursos de destino.
az deployment group create \
--name demoRGDeployment \
--resource-group ExampleGroup \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
--parameters storageAccountType=Standard_GRS
Para obtener información más detallada sobre los comandos y las opciones de implementación para la implementación de plantillas de Resource Manager, vea:
- Implementación de recursos con plantillas de ARM y Azure Portal
- Implementación de recursos con plantillas de ARM y la CLI de Azure
- Implementación de recursos con las plantillas de ARM y Azure PowerShell
- Implementación de recursos con plantillas de Resource Manager y la API REST de Azure Resource Manager
- Usar un botón de implementación para implementar plantillas desde el repositorio de GitHub
- Implementación de plantillas de Resource Manager desde Cloud Shell
Ámbitos de implementación
Al implementar en un grupo de recursos, puede implementar recursos para:
- el grupo de recursos de destino de la operación
- Otros grupos de recursos de la misma suscripción o de otras suscripciones
- cualquier suscripción en el inquilino
- el inquilino del grupo de recursos
Las únicas transiciones de ámbito prohibidas se producen desde el grupo de recursos al grupo de administración o desde la suscripción al grupo de administración.
Un recurso de extensión se puede limitar a un destino distinto del destino de implementación.
El usuario que implementa la plantilla debe tener acceso al ámbito especificado.
En esta sección se muestra cómo especificar distintos ámbitos. Puede combinar estos distintos ámbitos en una sola plantilla.
Ámbito de destino del grupo de recursos
Para implementar recursos en el recurso de destino, agréguelos a la sección de recursos de la plantilla.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
resource-group-resources
],
"outputs": {}
}
Para ver una plantilla de ejemplo, consulte Implementación en el grupo de recursos de destino.
Ámbito del grupo de recursos en la misma suscripción
Para implementar recursos en un grupo de recursos diferente de la misma suscripción, agregue una implementación anidada e incluya la resourceGroup
propiedad. Si no especifica el identificador de suscripción o el grupo de recursos, se usan la suscripción y el grupo de recursos de la plantilla primaria. Todos los grupos de recursos deben existir antes de ejecutar la implementación.
En el ejemplo siguiente, la implementación anidada tiene como destino un grupo de recursos denominado demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Para ver una plantilla de ejemplo, consulte Implementación en varios grupos de recursos.
Ámbito del grupo de recursos en una suscripción diferente
Para implementar recursos en un grupo de recursos de una suscripción diferente, agregue una implementación anidada e incluya las subscriptionId
propiedades y resourceGroup
. En el ejemplo siguiente, la implementación anidada tiene como destino un grupo de recursos denominado demoResourceGroup
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"resourceGroup": "demoResourceGroup",
"properties": {
"mode": "Incremental",
"template": {
resource-group-resources
}
}
}
],
"outputs": {}
}
Para ver una plantilla de ejemplo, consulte Implementación en varios grupos de recursos.
Ámbito de la suscripción
Para implementar recursos en una suscripción, agregue una implementación anidada e incluya la subscriptionId
propiedad. La suscripción puede ser la suscripción del grupo de recursos de destino o cualquier otra suscripción del inquilino. Además, establezca la location
propiedad de la implementación anidada.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"subscriptionId": "0000000-0000-0000-0000-000000000000",
"properties": {
"mode": "Incremental",
"template": {
subscription-resources
}
}
}
],
"outputs": {}
}
Para ver una plantilla de ejemplo, consulte Creación de un grupo de recursos.
Ámbito del inquilino
Para crear recursos en el inquilino, establezca scope
en /
. El usuario que implementa la plantilla debe tener el acceso necesario para realizar implementaciones en el inquilino.
Para usar una implementación anidada, establezca scope
y location
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedDeployment",
"location": "centralus",
"scope": "/",
"properties": {
"mode": "Incremental",
"template": {
tenant-resources
}
}
}
],
"outputs": {}
}
O bien, puede establecer el ámbito en /
para algunos tipos de recursos, como los grupos de administración.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"mgName": {
"type": "string",
"defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
}
},
"resources": [
{
"type": "Microsoft.Management/managementGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('mgName')]",
"scope": "/",
"location": "eastus",
"properties": {}
}
],
"outputs": {
"output": {
"type": "string",
"value": "[parameters('mgName')]"
}
}
}
Para más información, consulte Grupo de administración.
Implementación en el grupo de recursos de destino
Para implementar recursos en el grupo de recursos de destino, defina esos recursos en la sección resources
de la plantilla. La plantilla siguiente crea una cuenta de almacenamiento en el grupo de recursos que se especifica en la operación de implementación.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
},
"storageSKU": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Premium_ZRS",
"Standard_GZRS",
"Standard_RAGZRS"
]
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageSKU')]"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
],
"outputs": {
"storageEndpoint": {
"type": "object",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
}
}
}
Implementación de varios grupos de recursos
Puede implementar en más de un grupo de recursos en una sola plantilla de ARM. Para dirigirse a un grupo de recursos diferente del de la plantilla principal, use una plantilla anidada o vinculada. En el tipo de recurso de implementación, especifique los valores del identificador de suscripción y el grupo de recursos en el que desea que se implemente la plantilla anidada. Los grupos de recursos pueden existir en diferentes suscripciones.
Nota:
Puede implementar hasta 800 grupos de recursos en una única implementación. Normalmente, esta limitación significa que puede implementar en un grupo de recursos especificado para la plantilla primaria y hasta en 799 grupos de recursos en implementaciones anidadas o vinculadas. Sin embargo, si la plantilla principal solo contiene plantillas anidadas o vinculadas y no implementa ningún recurso, puede incluir hasta 800 grupos de recursos en implementaciones anidadas o vinculadas.
En el ejemplo siguiente se implementan dos cuentas de almacenamiento. La primera cuenta de almacenamiento se implementa en el grupo de recursos especificado en la operación de implementación. La segunda cuenta de almacenamiento se implementa en el grupo de recursos especificado en los parámetros secondResourceGroup
y secondSubscriptionID
:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"secondResourceGroup": {
"type": "string"
},
"secondSubscriptionID": {
"type": "string",
"defaultValue": ""
},
"secondStorageLocation": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"firstStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
"secondStorageName": "[concat(parameters('storagePrefix'), uniqueString(parameters('secondSubscriptionID'), parameters('secondResourceGroup')))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('firstStorageName')]",
"location": "[resourceGroup().location]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "nestedTemplate",
"resourceGroup": "[parameters('secondResourceGroup')]",
"subscriptionId": "[parameters('secondSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('secondStorageName')]",
"location": "[parameters('secondStorageLocation')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
}
]
},
"parameters": {}
}
}
]
}
Si establece resourceGroup
el nombre de un grupo de recursos que no existe, se produce un error en la implementación.
Para probar la plantilla anterior y ver los resultados, use PowerShell o la CLI de Azure.
Para implementar dos cuentas de almacenamiento en dos grupos de recursos de la misma suscripción, use:
firstRG="primarygroup"
secondRG="secondarygroup"
az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=tfstorage secondResourceGroup=$secondRG secondStorageLocation=eastus
Para implementar dos cuentas de almacenamiento en dos suscripciones, use:
firstRG="primarygroup"
secondRG="secondarygroup"
firstSub="<first-subscription-id>"
secondSub="<second-subscription-id>"
az account set --subscription $secondSub
az group create --name $secondRG --location eastus
az account set --subscription $firstSub
az group create --name $firstRG --location southcentralus
az deployment group create \
--name ExampleDeployment \
--resource-group $firstRG \
--template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
--parameters storagePrefix=storage secondResourceGroup=$secondRG secondStorageLocation=eastus secondSubscriptionID=$secondSub
Creación de un grupo de recursos
Desde una implementación de grupo de recursos, puede cambiar al nivel de una suscripción y crear un grupo de recursos. En la plantilla siguiente se implementa una cuenta de almacenamiento en el grupo de recursos de destino y se crea un nuevo grupo de recursos en la suscripción especificada.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"maxLength": 11
},
"newResourceGroupName": {
"type": "string"
},
"nestedSubscriptionID": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"name": "[variables('storageName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "demoSubDeployment",
"location": "westus",
"subscriptionId": "[parameters('nestedSubscriptionID')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2021-04-01",
"name": "[parameters('newResourceGroupName')]",
"location": "[parameters('location')]",
"properties": {}
}
],
"outputs": {}
}
}
}
]
}
Pasos siguientes
- Para obtener un ejemplo de implementación de la configuración del área de trabajo para Microsoft Defender for Cloud, vea deployASCwithWorkspaceSettings.json.