Implantações de grupo de recursos com arquivos Bicep

Este artigo descreve como definir o escopo com o Bicep ao implantar em um grupo de recursos.

Recursos compatíveis

A maioria dos recursos devem estar implantados em um grupo de recursos. Para obter uma lista de recursos disponíveis, confira Referência do modelo ARM.

Escopo de conjunto

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

targetScope = 'resourceGroup'

Mas, a definição do escopo de destino para o grupo de recursos é desnecessária 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 parâmetro --resource-group é 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 implantação e as opções para implantar modelos do ARM, confira:

Escopos de implantação

Ao implantar em um grupo de recursos, você pode implantar recursos:

  • o grupo de recursos de destino para a operação de implantação
  • outros grupos de recursos na mesma assinatura ou em outras assinaturas
  • em qualquer assinatura no locatário
  • no locatário do grupo de recursos

É possível definir o escopo de um recurso de extensão para um destino diferente do destino de implantação.

O usuário que implanta o modelo deve ter acesso ao escopo especificado.

Esta seção mostra como especificar escopos diferentes. Você pode combinar esses escopos diferentes em um só modelo.

Escopo para o 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@2019-06-01' = {
  ...
}

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

Escopo para um 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 propriedade scope 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 que tem como destino 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 exemplo a seguir mostra um módulo que tem como destino 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, confira Implantar em vários grupos de recursos.

Escopo de assinatura

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

Para implantar a 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 a ID dessa 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, confira Criar grupo de recursos com o Bicep.

Escopo de locatário

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

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

O exemplo a seguir inclui um módulo que é implantado no 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 como tenant() para 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@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Para obter mais informações, confira Grupo de gerenciamento.

Implantar no grupo de recursos de destino

Para implantar recursos no grupo de recursos de destino, defina esses recursos na seção resources 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@2021-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 modelo do arquivo Bicep.

Observação

A implantação pode ser feita em 800 grupos de recursos com 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 contém apenas os modelos aninhados ou vinculados e não implanta, ele mesmo, todos os recursos, você pode 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 parâmetros secondResourceGroup 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@2019-06-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, confira Criar grupo de recursos com o Bicep.

Próximas etapas

Para saber mais sobre outros escopos, consulte: