Dipendenze delle risorse in Bicep

Quando si distribuiscono le risorse, potrebbe essere necessario assicurarsi che alcune risorse vengano distribuite prima di altre risorse. Ad esempio, è necessario un server SQL logico prima di distribuire un database. Per definire questa relazione, si contrassegna una risorsa come dipendente dall'altra risorsa. L'ordine di distribuzione delle risorse viene determinato in due modi: dipendenza implicita e dipendenza esplicita

Azure Resource Manager valuta le dipendenze tra le risorse e le distribuisce in base all'ordine di dipendenza. Quando le risorse non sono interdipendenti, Resource Manager le distribuisce in parallelo. La definizione delle dipendenze è necessaria solo per le risorse distribuite nello stesso file Bicep.

Dipendenza implicita

Una dipendenza implicita viene creata quando una dichiarazione di risorsa fa riferimento a un'altra risorsa nella stessa distribuzione. Nell'esempio seguente, otherResource ottiene una proprietà da exampleDnsZone. La risorsa denominata otherResource dipende in modo implicito da exampleDnsZone.

resource exampleDnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'myZone'
  location: 'global'
}

resource otherResource 'Microsoft.Example/examples@2023-05-01' = {
  name: 'exampleResource'
  properties: {
    // get read-only DNS zone property
    nameServers: exampleDnsZone.properties.nameServers
  }
}

Una risorsa nidificata ha anche una dipendenza implicita dalla risorsa che lo contiene.

resource myParent 'My.Rp/parentType@2023-05-01' = {
  name: 'myParent'
  location: 'West US'

  // implicit dependency on 'myParent'
  resource myChild 'childType' = {
    name: 'myChild'
  }
}

Una risorsa che include la proprietà padre ha una dipendenza implicita dalla risorsa padre. Dipende dalla risorsa padre, non dalle altre risorse figlio.

L'esempio seguente mostra un account di archiviazione e un servizio file. Il servizio file ha una dipendenza implicita dall'account di archiviazione.

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2022-09-01' = {
  name: 'default'
  parent: storage
}

Quando esiste una dipendenza implicita, non aggiungere una dipendenza esplicita.

Per altre informazioni sulle risorse annidate, vedere Impostare il nome e il tipo per le risorse figlio in Bicep.

Dipendenza esplicita

Una dipendenza esplicita viene dichiarata con la proprietà dependsOn. La proprietà accetta una matrice di identificatori di risorsa, pertanto è possibile specificare più dipendenze. È possibile specificare una dipendenza della risorsa annidata usando l'operatore ::.

L'esempio seguente mostra una zona DNS denominata otherZone che dipende da una zona DNS denominata dnsZone:

resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'demoeZone1'
  location: 'global'
}

resource otherZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'demoZone2'
  location: 'global'
  dependsOn: [
    dnsZone
  ]
}

Anche se si potrebbe essere propensi a usare dependsOn per mappare le relazioni tra le risorse, è importante comprendere il motivo per cui si esegue tale operazione. Per documentare come le risorse sono interconnesse, dependsOn non rappresenta l'approccio corretto. Dopo la distribuzione, la risorsa non mantiene le dipendenze di distribuzione nelle sue proprietà, quindi non esistono comandi o operazioni che consentano di visualizzare le dipendenze. Impostare dipendenze non necessarie rallenta il tempo di distribuzione perché Resource Manager non è in grado di distribuire tali risorse in parallelo.

Anche se a volte sono necessarie dipendenze esplicite, la necessità di tali dipendenze è rara. Nella maggior parte dei casi, è possibile usare un nome simbolico per implicare la dipendenza tra le risorse. Se ci si trova a impostare dipendenze esplicite, è consigliabile prendere in considerazione se esiste un modo per rimuoverlo.

Visualizza le dipendenze

Visual Studio Code offre uno strumento per la visualizzazione delle dipendenze. Aprire un file Bicep in Visual Studio Code e selezionare il pulsante visualizzatore nell'angolo superiore sinistro. Lo screenshot seguente mostra le dipendenze di una macchina virtuale.

Screenshot of Visual Studio Code Bicep resource visualizer

Passaggi successivi

Per la sintassi di distribuire di una risorsa, vedere Dichiarazione di risorsa in Bicep.