Definir o âmbito dos recursos de extensão no Bicep
Um recurso de extensão é um recurso que modifica outro recurso. Por exemplo, pode atribuir uma função a um recurso. A atribuição de função é um tipo de recurso de extensão.
Para obter uma lista completa dos tipos de recursos de extensão, veja Tipos de recursos que expandem as capacidades de outros recursos.
Este artigo mostra como definir o âmbito de um tipo de recurso de extensão quando implementado com um ficheiro Bicep. Descreve a propriedade de âmbito que está disponível para recursos de extensão ao aplicar a um recurso.
Nota
A propriedade de âmbito só está disponível para tipos de recursos de extensão. Para especificar um âmbito diferente para um tipo de recurso que não seja um tipo de extensão, utilize um módulo.
Recursos de preparação
Se preferir saber mais sobre os recursos de extensão através da orientação passo a passo, veja Implementar recursos subordinados e de extensão com o Bicep.
Aplicar no âmbito de implementação
Para aplicar um tipo de recurso de extensão no âmbito de implementação de destino, adicione o recurso ao modelo tal como faria com qualquer outro tipo de recurso. Os âmbitos disponíveis são grupo de recursos, subscrição, grupo de gestão e inquilino. O âmbito de implementação tem de suportar o tipo de recurso.
Quando implementado num grupo de recursos, o seguinte modelo adiciona um bloqueio a esse grupo de recursos.
resource createRgLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'rgLock'
properties: {
level: 'CanNotDelete'
notes: 'Resource group should not be deleted.'
}
}
O exemplo seguinte atribui uma função à subscrição na qual está implementada.
targetScope = 'subscription'
@description('The principal to assign the role to')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
var role = {
Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
resource roleAssignSub 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
}
Aplicar ao recurso
Para aplicar um recurso de extensão a um recurso, utilize a scope
propriedade . Na propriedade âmbito, faça referência ao recurso ao qual está a adicionar a extensão. Para referenciar o recurso, forneça o nome simbólico do recurso. A propriedade de âmbito é uma propriedade de raiz para o tipo de recurso de extensão.
O exemplo seguinte cria uma conta de armazenamento e aplica-lhe uma função.
@description('The principal to assign the role to')
param principalId string
@allowed([
'Owner'
'Contributor'
'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string
param location string = resourceGroup().location
var role = {
Owner: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635'
Contributor: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c'
Reader: '/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7'
}
var uniqueStorageName = 'storage${uniqueString(resourceGroup().id)}'
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: uniqueStorageName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
resource roleAssignStorage 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(demoStorageAcct.id, principalId, role[builtInRoleType])
properties: {
roleDefinitionId: role[builtInRoleType]
principalId: principalId
}
scope: demoStorageAcct
}
Pode aplicar um recurso de extensão a um recurso existente. O exemplo seguinte adiciona um bloqueio a uma conta de armazenamento existente.
resource demoStorageAcct 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: 'examplestore'
}
resource createStorageLock 'Microsoft.Authorization/locks@2020-05-01' = {
name: 'storeLock'
scope: demoStorageAcct
properties: {
level: 'CanNotDelete'
notes: 'Storage account should not be deleted.'
}
}
Os mesmos requisitos aplicam-se aos recursos de extensão que outro recurso ao filtrar um âmbito diferente do âmbito de destino da implementação. Para saber mais sobre a implementação em mais do que um âmbito, veja:
- Implementações de grupos de recursos
- Implementações de subscrições
- Implementações de grupos de gestão
- Implementações de inquilinos
As propriedades resourceGroup e subscription só são permitidas em módulos. Estas propriedades não são permitidas em recursos individuais. Utilize módulos se quiser implementar um recurso de extensão com o âmbito definido para um recurso num grupo de recursos diferente.
O exemplo seguinte mostra como aplicar um bloqueio numa conta de armazenamento que reside num grupo de recursos diferente.
main.bicep:
param resourceGroup2Name string param storageAccountName string module applyStoreLock './storageLock.bicep' = { name: 'addStorageLock' scope: resourceGroup(resourceGroup2Name) params: { storageAccountName: storageAccountName } }
storageLock.bicep:
param storageAccountName string resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' existing = { name: storageAccountName } resource storeLock 'Microsoft.Authorization/locks@2020-05-01' = { scope: storage name: 'storeLock' properties: { level: 'CanNotDelete' notes: 'Storage account should not be deleted.' } }
Passos seguintes
Para obter uma lista completa dos tipos de recursos de extensão, veja Tipos de recursos que expandem as capacidades de outros recursos.