Implementaciones de grupos de recursos con plantillas de Resource Manager
En este artículo se describe cómo limitar la implementación a un grupo de recursos. Para la implementación puede usar una plantilla de Azure Resource Manager. 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.
Schema
Para las plantillas, usa el esquema siguiente:
{
"$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 de implementación y las opciones para implementar plantillas de Resource Manager, consulte:
- Implementación de recursos con Azure Portal y plantillas de Resource Manager
- 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 los recursos en:
- el grupo de recursos de destino de la operación
- otros grupos de recursos de la misma suscripción o de otras
- 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 ámbitos diferentes en una sola plantilla.
Ámbito de destino del grupo de recursos
Para implementar recursos en el recurso de destino, agregue esos recursos 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 en el grupo de recursos de la misma suscripción
Para implementar recursos en otro grupo de recursos de la misma suscripción, agregue una implementación anidada e incluya la propiedad resourceGroup
. Si no se especifica el grupo de recursos o el identificador de la suscripción, se utilizan los de la plantilla primaria. Todos los grupos de recursos deben existir antes de que se ejecute 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 en el grupo de recursos de otra suscripción
Para implementar recursos en un grupo de recursos de otra suscripción, agregue una implementación anidada e incluya las propiedades subscriptionId
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 propiedad subscriptionId
. La suscripción puede ser la del grupo de recursos de destino, o cualquier otra suscripción del inquilino. Además, establezca la propiedad location
para 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 misma plantilla de Resource Manager. Para establecer como destino un grupo de recursos diferente al de la plantilla primaria, use una plantilla anidada o vinculada. En el tipo de recurso de implementación, especifique los valores para el identificador de suscripción y el grupo de recursos en que quiere realizar la implementación de la plantilla anidada. Los grupos de recursos pueden existir en suscripciones distintas.
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 contiene solo plantillas anidadas o vinculadas y no implementa por sí misma ningún recurso, puede incluir hasta 800 grupos de recursos en las 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
en el nombre de un grupo de recursos que no existe, la implementación generará un error.
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
En una implementación de grupo de recursos, puede cambiar al nivel de una suscripción y crear un grupo de recursos. La siguiente plantilla implementa una cuenta de almacenamiento en el grupo de recursos de destino y crea un grupo de recursos nuevo 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.