Dependencias de recursos en Bicep

Al implementar recursos, es posible que deba asegurarse de que algunos recursos se implementen antes que otros. Por ejemplo, necesitará un servidor SQL lógico para poder implementar una base de datos. Establezca esta relación marcando un recurso como dependiente de otro recurso. El orden de implementación de los recursos se determinada de dos factores: dependencia implícita y dependencia explícita.

Azure Resource Manager evalúa las dependencias entre recursos y los implementa en su orden dependiente. Cuando no hay recursos dependientes entre sí, Resource Manager los implementa en paralelo. Solo tiene que definir las dependencias de recursos que se implementan en el mismo archivo de Bicep.

Dependencia implícita

Se crea una dependencia implícita cuando una declaración de recursos hace referencia a otro recurso de la misma implementación. En el ejemplo siguiente, otherResource obtiene una propiedad de exampleDnsZone. El recurso denominado otherResource depende implícitamente de 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
  }
}

Un recurso anidado también tiene una dependencia implícita en el recurso que lo contiene.

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

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

Un recurso que incluye la propiedad parent tiene una dependencia implícita del recurso principal. Depende del recurso principal, no de ninguno de sus otros recursos secundarios.

En el ejemplo siguiente se muestra una cuenta de almacenamiento y el servicio de archivos. El servicio de archivos tiene una dependencia implícita de la cuenta de almacenamiento.

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
}

Cuando exista una dependencia implícita, no agregue otra explícita.

Para obtener más información sobre los recursos anidados, consulte Establecimiento del nombre y el tipo de recursos secundarios en Bicep.

Dependencia explícita

Una dependencia explícita se declara con la propiedad dependsOn. La propiedad acepta una matriz de identificadores de recurso, por lo que puede especificar más de una dependencia. Puede especificar una dependencia de recursos anidada mediante el operador ::.

En el siguiente ejemplo se muestra una zona DNS denominada otherZone que depende de otra denominada 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
  ]
}

Si bien puede que se sienta tentado a usar dependsOn para asignar relaciones entre los recursos, es importante comprender por qué lo hace. Por ejemplo, para documentar cómo están interconectados los recursos, dependsOn no es el enfoque correcto. Después de la implementación, el recurso no conserva las dependencias de implementación en sus propiedades, por lo que no hay ningún comando u operación que le permita ver las dependencias. La configuración de dependencias innecesarias reduce el tiempo de implementación porque Resource Manager no puede implementar esos recursos en paralelo.

Aunque a veces se requieren dependencias explícitas, es poco frecuente que sean necesarias. En la mayoría de los casos, puede usar un nombre simbólico para insinuar la dependencia entre recursos. Si necesita establecer una dependencias explícita, tenga en cuenta si hay una manera de eliminarla.

Visualización de dependencias

Visual Studio Code proporciona una herramienta para visualizar las dependencias. Abra un archivo de Bicep en Visual Studio Code y, a continuación, seleccione el botón del visualizador en la esquina superior izquierda. En la siguiente captura de pantalla se muestran las dependencias de una máquina virtual:

Captura de pantalla del visualizador de recursos de Bicep de Visual Studio Code

Pasos siguientes

Para obtener la sintaxis para implementar un recurso, consulte Declaración de recursos en Bicep.