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:

Á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@2019-06-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@2020-05-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@2021-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@2019-06-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: