Установка имени и типа для дочерних ресурсов

Дочерними называются ресурсы, существующие только в контексте другого ресурса. Например, расширение виртуальной машины не может существовать за пределами виртуальной машины. Ресурс расширения является дочерним по отношению к виртуальной машине.

Каждый родительский ресурс принимает в качестве дочерних ресурсов только определенные типы ресурсов. Тип дочернего ресурса включает тип ресурса для родительского ресурса. Например, Microsoft.Web/sites/config и Microsoft.Web/sites/extensions оба являются дочерними ресурсами Microsoft.Web/sites. Принимаемые типы ресурсов указаны в схеме шаблона родительского ресурса.

В шаблоне Azure Resource Manager (шаблоне ARM) можно указать дочерний ресурс как в рамках родительского ресурса, так и за его пределами. Значения для имени и типа ресурса, зависят от того, определяется ли дочерний ресурс в пределах или за пределами родительского ресурса.

Совет

Мы рекомендуем использовать Bicep, так как он предоставляет те же возможности, что и шаблоны ARM, и имеет более простой синтаксис. Дополнительные сведения см. в документации по дочерним ресурсам.

В родительском ресурсе

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

"resources": [
  {
    <parent-resource>
    "resources": [
      <child-resource>
    ]
  }
]

Дочерние ресурсы можно определять максимум на пяти нижестоящих уровнях.

При определении в пределах типа родительского ресурса, значения типа и имени форматируются как один сегмент без косых черт.

"type": "{child-resource-type}",
"name": "{child-resource-name}",

В следующем примере показана виртуальная сеть и подсеть. Обратите внимание, что подсеть включена в массив ресурсов для виртуальной сети. Указано имя Subnet1 и тип подсетей. Дочерний ресурс помечается как зависимый от родительского ресурса, так как родительский ресурс должен существовать до развертывания дочернего ресурса.

"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2022-11-01",
    "name": "VNet1",
    "location": "[parameters('location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    },
    "resources": [
      {
        "type": "subnets",
        "apiVersion": "2022-11-01",
        "name": "Subnet1",
        "dependsOn": [
          "VNet1"
        ],
        "properties": {
          "addressPrefix": "10.0.0.0/24"
        }
      }
    ]
  }
]

Ресурс по-прежнему имеет полный тип Microsoft.Network/virtualNetworks/subnets. Microsoft.Network/virtualNetworks/ не указывается, так как предполагается из типа родительского ресурса.

Для дочернего ресурса указано имя Subnet1, но полное имя включает имя родительского ресурса. Имя VNet1 не указывается, так как оно предполагается из родительского ресурса.

За пределами родительского ресурса

В следующем примере показан дочерний ресурс за пределами родительского ресурса. Можно использовать этот подход, если родительский ресурс не развернут в этом же шаблоне или если требуется использовать копирование для создания нескольких дочерних ресурсов.

"resources": [
  {
    <parent-resource>
  },
  {
    <child-resource>
  }
]

При определении за пределами родительского ресурса значения типа и имени форматируются с использованием косой черты, чтобы включить тип и имя родительского ресурса.

"type": "{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}",
"name": "{parent-resource-name}/{child-resource-name}",

В следующем примере показана виртуальная сеть и подсеть, определенные на корневом уровне. Обратите внимание, что подсеть не включена в массив ресурсов виртуальной сети. Указывается имя VNet1/Subnet1 и тип Microsoft.Network/virtualNetworks/subnets. Дочерний ресурс помечается как зависимый от родительского ресурса, так как родительский ресурс должен существовать до развертывания дочернего ресурса.

"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2022-11-01",
    "name": "VNet1",
    "location": "[parameters('location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    }
  },
  {
    "type": "Microsoft.Network/virtualNetworks/subnets",
    "apiVersion": "2022-11-01",
    "name": "VNet1/Subnet1",
    "dependsOn": [
      "VNet1"
    ],
    "properties": {
      "addressPrefix": "10.0.0.0/24"
    }
  }
]

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