你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Bicep 中的资源依赖关系

部署资源时,可能需要确保在其他资源之前部署某些资源。 例如,在部署数据库之前,需要一个逻辑 SQL 服务器。 通过将一个资源标记为依赖于另一个资源来建立此关系。 资源部署的顺序以两种方式确定: 隐式依赖项显式依赖项

Azure 资源管理器评估资源之间的依赖关系,并按其依赖顺序部署它们。 如果资源互不依赖,资源管理器将以并行方式部署资源。 只需为部署在同一 Bicep 文件中的资源定义依赖项。

隐式依赖项

当一个资源声明引用同一部署中的另一个资源时,将创建隐式依赖项。 在下面的示例中, otherResourceexampleDnsZone中获取属性。 命名 otherResource 的资源隐式依赖 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
  }
}

嵌套资源也对其包含的资源具有隐式依赖项。

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

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

包含 属性的资源对父资源具有隐式依赖项。 它依赖于父资源,而不是依赖于其任何其他子资源。

以下示例显示了存储帐户和文件服务。 文件服务对存储帐户具有隐式依赖项。

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

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

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = {
  name: 'exampleshare'
  parent: service
}

如果存在隐式依赖项, 请不要添加显式依赖项

有关嵌套资源的详细信息,请参阅 Bicep 中为子资源设置名称和类型

显式依赖项

使用 dependsOn 属性声明显式依赖项。 该属性接受资源标识符数组,因此可以指定多个依赖项。 可以使用运算符指定嵌套资源依赖项::

以下示例显示了一个名为 otherZone 的 DNS 区域,它依赖于一个名为 dnsZone 的 DNS 区域:

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
  ]
}

虽然你可能倾向于用于 dependsOn 映射资源之间的关系,但请务必了解你这样做的原因。 例如,若要记录资源的互连方式, dependsOn 不是正确的方法。 部署后,资源不会在其属性中保留部署依赖项,因此没有允许查看依赖项的命令或作。 设置不必要的依赖项会降低部署时间,因为 Resource Manager 无法并行部署这些资源。

尽管有时需要显式依赖项,但很少需要显式依赖项。 在大多数情况下,可以使用符号名称来暗示资源之间的依赖关系。 如果发现自己设置显式依赖项,应考虑是否可以通过删除它。

可视化依赖项

Visual Studio Code 提供了用于可视化依赖项的工具。 在 Visual Studio Code 中打开 Bicep 文件,然后选择左上角的可视化工具按钮。 以下屏幕截图显示了虚拟机的依赖项。

Visual Studio Code Bicep 资源可视化工具的屏幕截图

后续步骤

有关部署资源的语法,请参阅 Bicep 中的资源声明