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

Bicep 中的资源依赖关系

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

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

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

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

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
}

存在隐式依赖项时,请勿添加显式依赖项。

有关嵌套资源的详细信息,请参阅在 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 并不是合适的方法。 部署后,资源不会在其属性中保留部署依赖项,因此没有可让你查看依赖项的命令或操作。 设置不必要的依赖关系会减慢部署速度,因为资源管理器无法并行部署这些资源。

尽管有时需要显式依赖关系,但这种情况非常罕见。 在大多数情况下,你可以使用一个符号名称来隐式表示资源之间的依赖关系。 如果发现自己设置了显式依赖项,应考虑是否可以将其删除。

可视化依赖项

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

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

后续步骤

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