Partilhar via


Implantações de grupos de recursos com arquivos Bicep

Este artigo descreve como definir o escopo com o Bicep ao implantar em um grupo de recursos. Para mais informações, consulte Compreender o âmbito.

Recursos suportados

A maioria dos recursos pode ser implantada em um grupo de recursos. Para obter uma lista de recursos disponíveis, consulte Referência de modelo ARM.

Definir âmbito

Por padrão, um arquivo Bicep tem como escopo o grupo de recursos. Se você quiser definir explicitamente o escopo, use:

targetScope = 'resourceGroup'

Mas, definir o escopo de destino para o grupo de recursos é desnecessário porque esse escopo é usado por padrão.

Comandos de implantação

Para implantar em um grupo de recursos, use os comandos de implantação do grupo de recursos.

Para a CLI do Azure, use az deployment group create. O exemplo a seguir implanta um modelo para criar um grupo de recursos. O grupo de recursos especificado 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 comandos de implantação e opções para implantar modelos ARM, consulte:

Escopos de implantação

Em um arquivo Bicep, todos os recursos declarados com a resource palavra-chave devem ser implantados no mesmo escopo da implantação. Para uma implantação de grupo de recursos, isso significa que todas as resource declarações no arquivo Bicep devem ser implantadas no mesmo grupo de recursos ou como um recurso filho ou de extensão de um recurso no mesmo grupo de recursos que a implantação.

No entanto, essa restrição não se aplica aos existing recursos. Você pode fazer referência a recursos existentes em um escopo diferente da implantação.

Para implantar recursos em vários escopos em uma única implantação, use módulos. A implantação de um módulo aciona uma "implantação aninhada", permitindo que você direcione escopos diferentes. O usuário que implanta o arquivo Bicep pai deve ter as permissões necessárias para iniciar implantações nesses escopos.

Você pode implantar um recurso de dentro de um arquivo Bicep de escopo de grupo de recursos nos seguintes escopos:

Âmbito do grupo de recursos de destino

Para implantar recursos no grupo de recursos de destino, adicione esses recursos ao arquivo Bicep.

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

Para obter um modelo de exemplo, consulte Implantar no grupo de recursos de destino.

Escopo para grupo de recursos diferente

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

Se o grupo de recursos estiver em uma assinatura diferente, forneça a ID da assinatura e o nome do grupo de recursos. Se o grupo de recursos estiver na mesma assinatura que a implantação atual, forneça apenas o nome do grupo de recursos. Se você não especificar uma assinatura na função resourceGroup, a assinatura atual será usada.

O exemplo a seguir mostra um módulo direcionado a um grupo de recursos em uma assinatura 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 próximo exemplo mostra um módulo destinado a um grupo de recursos na mesma assinatura.

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, consulte Implantar em vários grupos de recursos.

Âmbito da subscrição

Para implantar recursos em uma assinatura, adicione um módulo. Use a função de assinatura para definir sua scope propriedade.

Para implantar na assinatura atual, use a função de assinatura sem um parâmetro.


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

Para implantar em uma assinatura diferente, especifique essa ID de assinatura como um parâmetro na função de assinatura.

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, consulte Criar grupo de recursos com o Bicep.

Âmbito de aplicação para o inquilino

Para criar recursos no locatário, adicione um módulo. Use a função tenant para definir sua scope propriedade.

O usuário que implanta o modelo deve ter o acesso necessário para implantar no locatário.

O exemplo a seguir inclui um módulo que é implantado para o locatário.

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

Em vez de usar um módulo, você pode definir o escopo para tenant() alguns tipos de recursos. O exemplo a seguir implanta um grupo de gerenciamento no locatário.

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 obter mais informações, consulte Grupo de gerenciamento.

Implantar no grupo de recursos de destino

Para implantar recursos no grupo de recursos de destino, defina esses recursos na resources seção do modelo. O modelo a seguir cria uma conta de armazenamento no grupo de recursos especificado na operação de implantaçã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@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Implantar em vários grupos de recursos

Você pode implantar em mais de um grupo de recursos em um único arquivo Bicep.

Nota

Você pode implantar em 800 grupos de recursos em uma única implantação. Normalmente, essa limitação significa que você pode implantar em um grupo de recursos especificado para o modelo pai e até 799 grupos de recursos em implantações aninhadas ou vinculadas. No entanto, se o modelo pai contiver apenas modelos aninhados ou vinculados e não implantar recursos por si só, você poderá incluir até 800 grupos de recursos em implantações aninhadas ou vinculadas.

O exemplo a seguir implanta duas contas de armazenamento. A primeira conta de armazenamento é implantada no grupo de recursos especificado na operação de implantação. A segunda conta de armazenamento é implantada 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 usam o mesmo arquivo Bicep chamado 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: {}
}

Criar grupo de recursos

Para obter informações sobre como criar grupos de recursos, consulte Criar grupo de recursos com o Bicep.

Próximos passos

Para saber mais sobre outros escopos, consulte: