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:
- Implantar recursos com modelos ARM e CLI do Azure
- Implantar recursos com modelos ARM e Azure PowerShell
- Implantar modelos ARM a partir do Cloud Shell
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:
- O mesmo grupo de recursos
- Outros grupos de recursos na mesma subscrição
- Outros grupos de recursos em outras assinaturas
- A subscrição
- O inquilino
Â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: