Зависимости ресурсов в Bicep

При развертывании ресурсов бывает так, что некоторые ресурсы должны развертываться строго раньше других. Например, для развертывания базы данных требуется логический сервер SQL. Такую связь вы можете определить, обозначив один ресурс как зависимый от другого. Порядок развертывания ресурсов определяется двумя механизмами: неявная зависимость и явная зависимость.

Azure Resource Manager оценивает зависимости между ресурсами и развертывает эти ресурсы согласно установленным зависимостям. Если ресурсы не зависят друг от друга, диспетчер ресурсов развертывает их параллельно. Необходимо только определить зависимости для ресурсов, которые развертываются в том же файле Bicep.

Неявная зависимость

Неявная зависимость создается, когда одно объявление ресурса ссылается на другой ресурс в том же развертывании. В следующем примере otherResource получает свойство из exampleDnsZone. Ресурс с именем otherResource неявно зависит от 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
  }
}

Вложенный ресурс также имеет неявную зависимость от содержащего его ресурса.

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

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

Ресурс, включающий родительское свойство, имеет неявную зависимость от родительского ресурса. Это зависит от родительского ресурса, а не от других его дочерних ресурсов.

В следующем примере показана учетная запись хранения и файловая служба. Файловая служба имеет неявную зависимость от учетной записи хранения.

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
}

Если существует неявная зависимость, не добавляйте явную зависимость.

Дополнительные сведения о дочерних ресурсах см. в разделе Настройка имени и типа для дочерних ресурсов в Bicep.

Явная зависимость

Явная зависимость объявляется с помощью свойства dependsOn. Свойство принимает массив идентификаторов ресурсов, поэтому можно указать более одной зависимости. Зависимость вложенных ресурсов можно указать с помощью :: оператора .

В следующем примере показана зона DNS с именем otherZone, которая зависит от зоны DNS с именем 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
  ]
}

Если вы решили использовать свойство dependsOn для сопоставления связей между ресурсами, вам важно понимать, зачем вы это делаете. Например, использование свойства dependsOn для документирования связей между ресурсами будет неправильным решением. После развертывания ресурс не будет хранить зависимости развертывания в свойствах, поэтому команд или операций, позволяющих просматривать зависимости, нет. Установка ненужных зависимостей замедляет развертывание, так как диспетчер ресурсов не может развертывать зависимые ресурсы параллельно.

Несмотря на то, что явные зависимости иногда нужны, потребность в них возникает редко. В большинстве случаев для обозначения зависимости между ресурсами можно использовать символическое имя. Если вы обнаружите, что задаете явные зависимости, следует рассмотреть возможность их удаления.

Визуализация зависимостей

Visual Studio Code предоставляет средство для визуализации зависимостей. Откройте файл Bicep в Visual Studio Code и нажмите кнопку визуализатора в левом верхнем углу. На следующем снимке экрана показаны зависимости виртуальной машины.

Снимок экрана: визуализатор ресурсов Bicep в Visual Studio Code

Дальнейшие действия

Синтаксис для развертывания ресурса описан в статье Объявление ресурсов в Bicep.