Compartir vía


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. Para obtener más información, consulte Comprender el ámbito.

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

En un archivo de Bicep, todos los recursos declarados con la palabra clave resource deben implementarse en el mismo ámbito que la implementación. Para una implementación de grupo de recursos, esto significa que todas las declaraciones de resource en el archivo de Bicep deben implementarse en el mismo grupo de recursos o como recurso secundario o de extensión de un recurso del mismo grupo de recursos que la implementación.

Sin embargo, esta restricción no se aplica a los recursos existing. Puede hacer referencia a los recursos existentes en un ámbito diferente al de la implementación.

Para implementar recursos en varios ámbitos dentro de una sola implementación, use módulos. La implementación de un módulo desencadena una "implementación anidada", lo que le permite tener como destino distintos ámbitos. El usuario que implementa el archivo primario de Bicep debe tener los permisos necesarios para iniciar implementaciones en esos ámbitos.

Puede implementar un recurso desde un archivo de Bicep de ámbito de grupo de recursos en los siguientes ámbitos:

Á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 primaria 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:

@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: