Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Дочерними называются ресурсы, существующие только в контексте другого ресурса. Например, расширение виртуальной машины не может существовать без виртуальной машины. Ресурс расширения является дочерним элементом виртуальной машины.
Каждый родительский ресурс принимает только определенные типы ресурсов в качестве дочерних ресурсов. Иерархия типов ресурсов доступна в справочнике по ресурсам Bicep.
В этой статье показаны различные способы объявления дочернего ресурса.
Обучающие материалы
Если вы хотите узнать о дочерних ресурсах с помощью пошагового руководства, см. статью "Развертывание дочерних ресурсов и ресурсов расширения с помощью Bicep".
Шаблон имени и типа
В Bicep можно указать дочерний ресурс внутри или за пределами родительского ресурса. Значения, предоставляемые для имени ресурса и типа ресурса, зависят от способа объявления дочернего ресурса. Однако полное имя и тип всегда разрешаются в том же шаблоне.
Полное имя дочернего ресурса использует шаблон:
{parent-resource-name}/{child-resource-name}
Если в иерархии имеется более двух уровней, продолжайте повторять родительские имена:
{parent-resource-name}/{child-level1-resource-name}/{child-level2-resource-name}
Полный тип дочернего ресурса использует шаблон:
{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}
Если в иерархии имеется более двух уровней, продолжайте повторять родительские типы ресурсов:
{resource-provider-namespace}/{parent-resource-type}/{child-level1-resource-type}/{child-level2-resource-type}
Если вы подсчитываете сегменты между /
символами, то число сегментов в типе всегда на один больше, чем число сегментов в имени.
В родительском ресурсе
В следующем примере показан дочерний ресурс, включённый в свойство ресурсов родительского ресурса.
resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
<parent-resource-properties>
resource <child-resource-symbolic-name> '<child-resource-type>' = {
<child-resource-properties>
}
}
Объявление вложенных ресурсов должно отображаться на верхнем уровне синтаксиса родительского ресурса. Объявления могут быть вложены произвольно глубоко, если каждый уровень является дочерним типом родительского ресурса.
При определении в родительском типе ресурса форматируете значения типа и имени в виде одного сегмента без косой черты. В следующем примере показана учетная запись хранения с дочерним ресурсом для файловой службы, а у файловой службы есть дочерний ресурс для общей папки. Имя службы файлов установлено как default
, а его тип установлен как fileServices
. Имя общей папки задано exampleshare
, а его тип имеет значение shares
.
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
Полные типы ресурсов по-прежнему Microsoft.Storage/storageAccounts/fileServices
и Microsoft.Storage/storageAccounts/fileServices/shares
. Вы не предоставляете Microsoft.Storage/storageAccounts/
, поскольку это подразумевается из родительского типа ресурса и его версии. Вложенный ресурс может при необходимости объявить версию API с помощью синтаксиса <segment>@<version>
. Если вложенный ресурс не использует версию API, используется версия API родительского ресурса. Если вложенный ресурс указывает версию API, используется указанная версия API.
Имена дочерних ресурсов заданы default
и exampleshare
, но полные имена включают родительские имена. Вы не предоставляете examplestorage
или default
, так как они предполагаются как данные из родительского ресурса.
Вложенный ресурс может получить доступ к свойствам родительского ресурса. Другие ресурсы, объявленные внутри тела одного родительского ресурса, могут ссылаться друг на друга с помощью символьных имен. Родительский ресурс может не получить доступ к свойствам содержащихся в нем ресурсов, эта попытка приведет к циклической зависимости.
Чтобы ссылаться на вложенный ресурс за пределами родительского ресурса, он должен быть квалифицирован с соответствующим именем ресурса и оператором ::
. Например, чтобы вывести свойство из дочернего ресурса:
output childAddressPrefix string = VNet1::VNet1_Subnet1.properties.addressPrefix
Внешний родительский ресурс
В следующем примере показан дочерний ресурс за пределами родительского ресурса. Этот подход можно использовать, если родительский ресурс не развернут в одном шаблоне или если вы хотите использовать цикл для создания нескольких дочерних ресурсов. Укажите свойство родителя у дочернего элемента, задав его значение как символическое имя родителя. Этот синтаксис по-прежнему должен объявлять полный тип ресурса, но имя дочернего ресурса — это только имя дочернего ресурса.
resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
name: 'myParent'
<parent-resource-properties>
}
resource <child-resource-symbolic-name> '<child-resource-type>@<api-version>' = {
parent: <parent-resource-symbolic-name>
name: 'myChild'
<child-resource-properties>
}
При определении за пределами родительского ресурса форматируйте тип, используя косые черты, чтобы включить родительский тип и имя.
В следующем примере показана учетная запись хранения, файловая служба и общая папка, определенные на корневом уровне.
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2024-01-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2024-01-01' = {
name: 'exampleshare'
parent: service
}
Ссылка на символическое имя дочернего ресурса осуществляется так же, как и ссылка на родительский ресурс.
Полное имя ресурса вне родительского элемента
При объявлении дочернего ресурса за пределами родительского ресурса можно также использовать полное имя ресурса и тип. Вы не устанавливаете родительское свойство для дочернего ресурса. Так как зависимость не может быть выведена, необходимо явно задать ее.
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: 'examplestorage'
location: resourceGroup().location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2024-01-01' = {
name: 'examplestorage/default'
dependsOn: [
storage
]
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2024-01-01' = {
name: 'examplestorage/default/exampleshare'
dependsOn: [
service
]
}
Это важно
Установка полного имени ресурса и типа не рекомендуется. Это не так безопасно, как использование одного из других подходов. Дополнительные сведения см. в правиле Linter: использование родительского свойства.
Дальнейшие шаги
- Сведения о создании файлов Bicep см. в статье "Общие сведения о структуре и синтаксисе файлов Bicep".
- Сведения о формате имени ресурса при ссылке на ресурс см. в справочной функции.