Implementações de grupos de recursos com ficheiros Bicep

Este artigo descreve como definir o âmbito com o Bicep ao implementar num grupo de recursos.

Recursos suportados

A maioria dos recursos pode ser implementada num grupo de recursos. Para obter uma lista dos recursos disponíveis, veja Referência do modelo do ARM.

Definir âmbito

Por predefinição, um ficheiro Bicep está no âmbito do grupo de recursos. Se quiser definir explicitamente o âmbito, utilize:

targetScope = 'resourceGroup'

No entanto, a definição do âmbito de destino para o grupo de recursos é desnecessária porque esse âmbito é utilizado por predefinição.

Comandos de implementação

Para implementar num grupo de recursos, utilize os comandos de implementação do grupo de recursos.

Para a CLI do Azure, utilize az deployment group create. O exemplo seguinte implementa um modelo para criar um grupo de recursos. O grupo de recursos que especificar no --resource-group parâmetro é o grupo de recursos de destino.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-file main.bicep \
  --parameters storageAccountType=Standard_GRS

Para obter informações mais detalhadas sobre os comandos de implementação e as opções para implementar modelos do ARM, veja:

Âmbitos de implementação

Ao implementar num grupo de recursos, pode implementar recursos em:

  • o grupo de recursos de destino para a operação de implementação
  • outros grupos de recursos na mesma subscrição ou noutras subscrições
  • qualquer subscrição no inquilino
  • o inquilino do grupo de recursos

Um recurso de extensão pode ser confinado a um destino diferente do destino de implementação.

O utilizador que está a implementar o modelo tem de ter acesso ao âmbito especificado.

Esta secção mostra como especificar diferentes âmbitos. Pode combinar estes âmbitos diferentes num único modelo.

Âmbito para o grupo de recursos de destino

Para implementar recursos no grupo de recursos de destino, adicione esses recursos ao ficheiro Bicep.

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  ...
}

Para obter um modelo de exemplo, veja Implementar no grupo de recursos de destino.

Âmbito para um grupo de recursos diferente

Para implementar recursos num grupo de recursos que não seja o grupo de recursos de destino, adicione um módulo. Utilize a função resourceGroup para definir a scope propriedade para esse módulo.

Se o grupo de recursos estiver numa subscrição diferente, indique o ID da subscrição e o nome do grupo de recursos. Se o grupo de recursos estiver na mesma subscrição que a implementação atual, forneça apenas o nome do grupo de recursos. Se não especificar uma subscrição na função resourceGroup, é utilizada a subscrição atual.

O exemplo seguinte mostra um módulo que visa um grupo de recursos numa subscrição 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)
}

O exemplo seguinte mostra um módulo que visa um grupo de recursos na mesma subscrição.

param otherResourceGroup string

// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
  name: 'otherRG'
  scope: resourceGroup(otherResourceGroup)
}

Para obter um modelo de exemplo, veja Implementar em vários grupos de recursos.

Âmbito da subscrição

Para implementar recursos numa subscrição, adicione um módulo. Utilize a função de subscrição para definir a respetiva scope propriedade.

Para implementar na subscrição atual, utilize a função de subscrição sem um parâmetro.


// module deployed at subscription level
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

Para implementar numa subscrição diferente, especifique esse ID de subscrição como um parâmetro na função de subscrição.

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(otherSubscriptionID)
}

Para obter um modelo de exemplo, veja Criar um grupo de recursos com o Bicep.

Âmbito para inquilino

Para criar recursos no inquilino, adicione um módulo. Utilize a função de inquilino para definir a respetiva scope propriedade.

O utilizador que está a implementar o modelo tem de ter o acesso necessário para implementar no inquilino.

O exemplo seguinte inclui um módulo que é implementado no inquilino.

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Em vez de utilizar um módulo, pode definir o âmbito como tenant() para alguns tipos de recursos. O exemplo seguinte implementa um grupo de gestão no 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 obter mais informações, veja Grupo de gestão.

Implementar no grupo de recursos de destino

Para implementar recursos no grupo de recursos de destino, defina esses recursos na resources secção do modelo. O modelo seguinte cria uma conta de armazenamento no grupo de recursos especificado na operação de implementação.

@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

Implementar em vários grupos de recursos

Pode implementar em mais do que um grupo de recursos num único ficheiro Bicep.

Nota

Pode implementar em 800 grupos de recursos numa única implementação. Normalmente, esta limitação significa que pode implementar num grupo de recursos especificado para o modelo principal e até 799 grupos de recursos em implementações aninhadas ou ligadas. No entanto, se o modelo principal contiver apenas modelos aninhados ou ligados e não implementar recursos, pode incluir até 800 grupos de recursos em implementações aninhadas ou ligadas.

O exemplo seguinte implementa duas contas de armazenamento. A primeira conta de armazenamento é implementada no grupo de recursos especificado na operação de implementação. A segunda conta de armazenamento é implementada no grupo de recursos especificado nos secondResourceGroup parâmetros e 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 os módulos utilizam o mesmo ficheiro Bicep com o nome 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: {}
}

Criar grupo de recursos

Para obter informações sobre a criação de grupos de recursos, veja Criar um grupo de recursos com o Bicep.

Passos seguintes

Para saber mais sobre outros âmbitos, veja: