Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Recursos filho são recursos que existem apenas no contexto de outro recurso. Por exemplo, uma extensão de máquina virtual não pode existir sem uma máquina virtual. O recurso de extensão é um filho da máquina virtual.
Cada recurso pai aceita apenas determinados tipos de recursos como recursos filho. A hierarquia de tipos de recursos está disponível na referência de recursos do Bicep.
Este artigo mostra diferentes maneiras de declarar um recurso filho.
Recursos de formação
Se preferir aprender sobre recursos filho por meio de orientação passo a passo, consulte Implantar recursos filho e de extensão usando o Bicep.
Nome e padrão de tipo
No Bicep, você pode especificar o recurso filho dentro do recurso pai ou fora do recurso pai. Os valores fornecidos para o nome e o tipo de recurso variam com base em como você declara o recurso filho. No entanto, o nome completo e o tipo sempre resolvem para o mesmo padrão.
O nome completo do recurso filho usa o padrão:
{parent-resource-name}/{child-resource-name}
Se você tiver mais de dois níveis na hierarquia, continue repetindo nomes pai:
{parent-resource-name}/{child-level1-resource-name}/{child-level2-resource-name}
O tipo completo do recurso filho usa o padrão:
{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}
Se você tiver mais de dois níveis na hierarquia, continue repetindo os tipos de recursos pai:
{resource-provider-namespace}/{parent-resource-type}/{child-level1-resource-type}/{child-level2-resource-type}
Se você contar os segmentos entre /
caracteres, o número de segmentos no tipo será sempre um a mais do que o número de segmentos no nome.
Dentro do recurso pai
O exemplo a seguir mostra o recurso filho incluído na propriedade resources do recurso pai.
resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
<parent-resource-properties>
resource <child-resource-symbolic-name> '<child-resource-type>' = {
<child-resource-properties>
}
}
Uma declaração de recurso aninhada deve aparecer no nível superior de sintaxe do recurso pai. As declarações podem ser aninhadas arbitrariamente profundas, desde que cada nível seja um tipo filho de seu recurso pai.
Quando definido dentro do tipo de recurso pai, você formata os valores de tipo e nome como um único segmento sem barras. O exemplo a seguir mostra uma conta de armazenamento com um recurso filho para o serviço de arquivo e o serviço de arquivo tem um recurso filho para o compartilhamento de arquivos. O nome do serviço de arquivo é definido como default
e seu tipo é definido como fileServices
. O nome do compartilhamento de arquivos é definido exampleshare
e seu tipo é definido como 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'
}
}
}
Os tipos de recursos completos ainda Microsoft.Storage/storageAccounts/fileServices
são e Microsoft.Storage/storageAccounts/fileServices/shares
. Você não fornece Microsoft.Storage/storageAccounts/
porque é assumido a partir do tipo de recurso pai e versão. O recurso aninhado pode, opcionalmente, declarar uma versão da API usando a sintaxe <segment>@<version>
. Se o recurso aninhado omitir a versão da API, a versão da API do recurso pai será usada. Se o recurso aninhado especificar uma versão da API, a versão da API especificada será usada.
Os nomes de recursos filho são definidos como default
e exampleshare
mas os nomes completos incluem os nomes pai. Você não fornece examplestorage
ou default
porque eles são assumidos a partir do recurso pai.
Um recurso aninhado pode acessar propriedades de seu recurso pai. Outros recursos declarados dentro do corpo do mesmo recurso pai podem fazer referência uns aos outros usando os nomes simbólicos. Um recurso pai pode não acessar propriedades dos recursos que ele contém, essa tentativa causaria uma dependência cíclica.
Para fazer referência a um recurso aninhado fora do recurso pai, ele deve ser qualificado com o nome do recurso que contém e o ::
operador. Por exemplo, para produzir uma propriedade de um recurso filho:
output childAddressPrefix string = VNet1::VNet1_Subnet1.properties.addressPrefix
Recurso pai externo
O exemplo a seguir mostra o recurso filho fora do recurso pai. Você pode usar essa abordagem se o recurso pai não for implantado no mesmo modelo ou se quiser usar um loop para criar mais de um recurso filho. Especifique a propriedade pai no filho com o valor definido como o nome simbólico do pai. Com essa sintaxe, você ainda precisa declarar o tipo de recurso completo, mas o nome do recurso filho é apenas o nome do filho.
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>
}
Quando definido fora do recurso pai, você formata o tipo e com barras para incluir o tipo e o nome pai.
O exemplo a seguir mostra uma conta de armazenamento, serviço de arquivo e compartilhamento de arquivos que são definidos no nível raiz.
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
}
Fazer referência ao nome simbólico do recurso filho funciona da mesma forma que fazer referência ao pai.
Nome completo do recurso fora do pai
Você também pode usar o nome completo do recurso e o tipo ao declarar o recurso filho fora do pai. Você não define a propriedade pai no recurso filho. Como a dependência não pode ser inferida, você deve defini-la explicitamente.
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
]
}
Importante
Definir o nome e o tipo completos do recurso não é a abordagem recomendada. Não é tão seguro quanto usar uma das outras abordagens. Para obter mais informações, consulte Regra de Linter: use a propriedade pai.
Próximos passos
- Para saber mais sobre como criar arquivos Bicep, consulte Compreender a estrutura e a sintaxe dos arquivos Bicep.
- Para saber mais sobre o formato do nome do recurso ao fazer referência ao recurso, consulte a função de referência.