Dependências de recursos no Bicep
Ao implementar recursos, poderá ter de se certificar de que alguns recursos são implementados antes de outros recursos. Por exemplo, precisa de um servidor SQL lógico antes de implementar uma base de dados. Esta relação é estabelecida ao marcar um recurso como dependente do outro recurso. A ordem de implementação de recursos é determinada de duas formas: dependência implícita e dependência explícita
O Azure Resource Manager avalia as dependências entre os recursos e implementa-as na respetiva ordem dependente. Quando os recursos não são dependentes entre si, o Resource Manager implementa-os em paralelo. Só tem de definir dependências para os recursos implementados no mesmo ficheiro Bicep.
Dependência implícita
É criada uma dependência implícita quando uma declaração de recursos referencia outro recurso na mesma implementação. No exemplo seguinte, otherResource
obtém uma propriedade de exampleDnsZone
. O recurso com o nome otherResource
depende implicitamente de exampleDnsZone
.
resource exampleDnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = {
name: 'myZone'
location: 'global'
}
resource otherResource 'Microsoft.Example/examples@2024-05-01' = {
name: 'exampleResource'
properties: {
// get read-only DNS zone property
nameServers: exampleDnsZone.properties.nameServers
}
}
Um recurso aninhado também tem uma dependência implícita no recurso que contém.
resource myParent 'My.Rp/parentType@2024-05-01' = {
name: 'myParent'
location: 'West US'
// implicit dependency on 'myParent'
resource myChild 'childType' = {
name: 'myChild'
}
}
Um recurso que inclui a propriedade principal tem uma dependência implícita no recurso principal. Depende do recurso principal, não de nenhum dos seus outros recursos subordinados.
O exemplo seguinte mostra uma conta de armazenamento e um serviço de ficheiros. O serviço de ficheiros tem uma dependência implícita na conta de armazenamento.
resource storage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2023-04-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
name: 'exampleshare'
parent: service
}
Quando existir uma dependência implícita, não adicione uma dependência explícita.
Para obter mais informações sobre recursos aninhados, veja Definir nome e tipo para recursos subordinados no Bicep.
Dependência explícita
Uma dependência explícita é declarada com a dependsOn
propriedade . A propriedade aceita uma matriz de identificadores de recursos, pelo que pode especificar mais do que uma dependência. Pode especificar uma dependência de recurso aninhada com o ::
operador .
O exemplo seguinte mostra uma zona DNS denominada otherZone
que depende de uma zona DNS denominada dnsZone
:
resource dnsZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
name: 'demoZone1'
location: 'global'
}
resource otherZone 'Microsoft.Network/dnszones@2023-07-01-preview' = {
name: 'demoZone2'
location: 'global'
dependsOn: [
dnsZone
]
}
Embora possa estar inclinado a utilizar dependsOn
para mapear relações entre os seus recursos, é importante compreender por que motivo o está a fazer. Por exemplo, para documentar como os recursos estão interligados, dependsOn
não é a abordagem certa. Após a implementação, o recurso não retém as dependências de implementação nas respetivas propriedades, pelo que não existem comandos ou operações que lhe permitam ver dependências. Definir dependências desnecessárias atrasa o tempo de implementação porque Resource Manager não consegue implementar esses recursos em paralelo.
Embora, por vezes, sejam necessárias dependências explícitas, a necessidade das mesmas é rara. Na maioria dos casos, pode utilizar um nome simbólico para implicar a dependência entre recursos. Se definir dependências explícitas, deve considerar se existe uma forma de removê-la.
Visualizar dependências
O Visual Studio Code fornece uma ferramenta para visualizar as dependências. Abra um ficheiro Bicep no Visual Studio Code e selecione o botão de visualização no canto superior esquerdo. A seguinte captura de ecrã mostra as dependências de uma máquina virtual.
Passos seguintes
Para obter a sintaxe para implementar um recurso, veja Declaração de recursos no Bicep.