Implementaciones de grupos de recursos con archivos de Bicep
En este artículo se describe cómo establecer el ámbito con Bicep al implementar en un grupo de administración.
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.
Ámbito de conjunto
De forma predeterminada, un archivo Bicep tiene como ámbito el grupo de recursos. Si desea establecer explícitamente el ámbito, use:
targetScope = 'resourceGroup'
Sin embargo, no es necesario establecer el ámbito de destino en el grupo de recursos porque ese ámbito se usa de forma predeterminada.
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-file main.bicep \
--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 plantillas de ARM y la CLI de Azure
- Implementación de recursos con las plantillas de ARM y Azure PowerShell
- 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 para la operación de implementació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
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 grupo de recursos de destino, agregue esos recursos al archivo Bicep.
// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2023-04-01' = {
...
}
Para ver una plantilla de ejemplo, consulte Implementación en el grupo de recursos de destino.
Ámbito en un grupo de recursos diferente
Para implementar recursos en un grupo de recursos que no sea el grupo de recursos de destino, agregue un módulo. Use la función resourceGroup para establecer la propiedad scope
para ese módulo.
Si el grupo de recursos está en otra suscripción, proporcione el id. de suscripción y el nombre del grupo de recursos. Si el grupo de recursos está en la misma suscripción que la implementación actual, proporcione solo el nombre del grupo de recursos. Si no especifica una suscripción en la función resourceGroup, se usa la suscripción actual.
En el ejemplo siguiente se muestra un módulo que tiene como destino un grupo de recursos de una suscripción diferente.
param otherResourceGroup string
param otherSubscriptionID string
// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
name: 'otherSubAndRG'
scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}
En el ejemplo siguiente se muestra un módulo que tiene como destino un grupo de recursos de la misma suscripción.
param otherResourceGroup string
// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
name: 'otherRG'
scope: resourceGroup(otherResourceGroup)
}
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 un módulo. Use la función de suscripción para establecer su propiedad scope
.
Para implementar en la suscripción actual, use la función de suscripción sin ningún parámetro.
// module deployed at subscription level
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription()
}
Para realizar la implementación en otra suscripción, especifique ese id. de suscripción como parámetro en la función de suscripción.
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(otherSubscriptionID)
}
Para ver una plantilla de ejemplo, consulte Creación de un grupo de recursos con Bicep.
Ámbito del inquilino
Para crear recursos en el inquilino, agregue un módulo. Use la función tenant para establecer su propiedad scope
.
El usuario que implementa la plantilla debe tener el acceso necesario para realizar implementaciones en el inquilino.
En el ejemplo siguiente se incluye un módulo que se implementa en el inquilino.
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
En lugar de usar un módulo, puede establecer el ámbito en tenant()
para algunos tipos de recursos. En el ejemplo siguiente se implementa un grupo de administración en el inquilino.
param mgName string = 'mg-${uniqueString(newGuid())}'
// ManagementGroup deployed at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2023-04-01' = {
scope: tenant()
name: mgName
properties: {}
}
output output string = 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.
@minLength(3)
@maxLength(11)
param storagePrefix string
@allowed([
'Standard_LRS'
'Standard_GRS'
'Standard_RAGRS'
'Standard_ZRS'
'Premium_LRS'
'Premium_ZRS'
'Standard_GZRS'
'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location
var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageSKU
}
kind: 'StorageV2'
properties: {
supportsHttpsTrafficOnly: true
}
}
output storageEndpoint object = stg.properties.primaryEndpoints
Implementación de varios grupos de recursos
Puede implementar en más de un grupo de recursos de un único archivo Bicep.
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
:
@maxLength(11)
param storagePrefix string
param firstStorageLocation string = resourceGroup().location
param secondResourceGroup string
param secondSubscriptionID string = ''
param secondStorageLocation string
var firstStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var secondStorageName = '${storagePrefix}${uniqueString(secondSubscriptionID, secondResourceGroup)}'
module firstStorageAcct 'storage.bicep' = {
name: 'storageModule1'
params: {
storageLocation: firstStorageLocation
storageName: firstStorageName
}
}
module secondStorageAcct 'storage.bicep' = {
name: 'storageModule2'
scope: resourceGroup(secondSubscriptionID, secondResourceGroup)
params: {
storageLocation: secondStorageLocation
storageName: secondStorageName
}
}
Ambos módulos usan el mismo archivo Bicep denominado storage.bicep.
param storageLocation string
param storageName string
resource storageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageName
location: storageLocation
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
Creación de un grupo de recursos
Para obtener información sobre cómo crear grupos de recursos, consulte Creación de un grupo de recursos con Bicep.
Pasos siguientes
Para obtener más información sobre otros ámbitos, consulte: