Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le risorse figlio sono risorse presenti solo all'interno del contesto di un'altra risorsa. Ad esempio, un'estensione macchina virtuale non può esistere senza una macchina virtuale. La risorsa di estensione è un elemento figlio della macchina virtuale.
Ogni risorsa padre accetta solo determinati tipi di risorse come risorse figlie. La gerarchia dei tipi di risorse è disponibile nelle informazioni di riferimento sulle risorse Bicep.
Questo articolo illustra diversi modi in cui è possibile dichiarare una risorsa figlio.
Risorse di formazione
Se preferisci apprendere mediante una guida passo-passo le risorse figlio, consulta Distribuire risorse figlio ed estensioni usando Bicep.
Modello nome e tipo
In Bicep è possibile specificare la risorsa figlio all'interno della risorsa padre o all'esterno della risorsa padre. I valori specificati per il nome della risorsa e il tipo di risorsa variano in base alla modalità di dichiarazione della risorsa figlia. Tuttavia, il nome completo e il tipo corrispondono sempre allo stesso schema.
Il nome completo della risorsa figlio segue il modello:
{parent-resource-name}/{child-resource-name}
Se nella gerarchia sono presenti più di due livelli, continuare a ripetere i nomi padre:
{parent-resource-name}/{child-level1-resource-name}/{child-level2-resource-name}
Il tipo completo della risorsa figlio segue il modello:
{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}
Se nella gerarchia sono presenti più di due livelli, continuare a ripetere i tipi di risorse padre:
{resource-provider-namespace}/{parent-resource-type}/{child-level1-resource-type}/{child-level2-resource-type}
Se si contano i segmenti tra /
i caratteri, il numero di segmenti nel tipo è sempre uno più del numero di segmenti nel nome.
All'interno della risorsa principale
Nell'esempio seguente viene illustrata la risorsa figlio inclusa nella proprietà resources della risorsa padre.
resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
<parent-resource-properties>
resource <child-resource-symbolic-name> '<child-resource-type>' = {
<child-resource-properties>
}
}
Una dichiarazione di risorsa nidificata deve essere inserita nel livello superiore della sintassi della risorsa padre. Le dichiarazioni possono essere annidate profondamente e in modo arbitrario, purché ogni livello rappresenti un tipo figlio della risorsa madre di cui è parte.
Quando definito all'interno del tipo di risorsa padre, i valori di tipo e nome si formattano come un singolo segmento senza slash. L'esempio seguente mostra un account di archiviazione con una risorsa figlio per il servizio file e il servizio file ha una risorsa figlio per la condivisione file. Il nome del servizio file è impostato su default
e il relativo tipo è impostato su fileServices
. Il nome della condivisione file è impostato exampleshare
e il relativo tipo è impostato su 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'
}
}
}
I tipi di risorse completi sono ancora Microsoft.Storage/storageAccounts/fileServices
e Microsoft.Storage/storageAccounts/fileServices/shares
. Non specifichi Microsoft.Storage/storageAccounts/
perché si presume che provenga dal tipo e dalla versione della risorsa padre. La risorsa nidificata può facoltativamente dichiarare una versione dell'API usando la sintassi <segment>@<version>
. Se la risorsa annidata omette la versione dell'API, viene usata la versione API della risorsa padre. Se la risorsa annidata specifica una versione dell'API, viene usata la versione dell'API specificata.
I nomi delle risorse secondarie sono impostati su default
e exampleshare
, ma i nomi completi includono i nomi dei genitori. Non si specifica examplestorage
o default
perché si presuppone che provenissero dalla risorsa padre.
Una risorsa nidificata può accedere alle proprietà della risorsa padre. Altre risorse dichiarate all'interno del corpo della stessa risorsa principale possono fare riferimento reciproco usando i nomi simbolici. Una risorsa principale non può accedere alle proprietà delle risorse che contiene, questo tentativo causerebbe una dipendenza ciclica.
Per fare riferimento a una risorsa nidificata al di fuori della risorsa padre, questa deve essere qualificata con il nome della risorsa contenitore e l'operatore ::
. Ad esempio, per ottenere una proprietà da una risorsa figlia:
output childAddressPrefix string = VNet1::VNet1_Subnet1.properties.addressPrefix
Risorsa principale esterna
Nell'esempio seguente viene illustrata la risorsa figlio all'esterno della risorsa padre. È possibile usare questo approccio se la risorsa padre non viene distribuita nello stesso modello o se si vuole usare un ciclo per creare più di una risorsa figlio. Specificare la proprietà del genitore nell'elemento figlio con il valore impostato al nome simbolico del genitore. Con questa sintassi è comunque necessario dichiarare il tipo di risorsa completo, ma il nome della risorsa figlio è solo il nome del figlio.
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 è definito al di fuori della risorsa padre, si formatta il tipo con barre per includere il tipo e il nome del padre.
L'esempio seguente mostra un account di archiviazione, un servizio file e una condivisione file definiti a livello radice.
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
}
Fare riferimento al nome simbolico della risorsa figlia equivale a fare riferimento alla risorsa madre.
Nome completo della risorsa esterna all'elemento padre
È anche possibile usare il nome completo della risorsa e il tipo quando si dichiara la risorsa subordinata all'esterno della risorsa principale. Non si imposta la proprietà genitore sulla risorsa figlia. Poiché la dipendenza non può essere dedotta, è necessario impostarla in modo esplicito.
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
L'impostazione del nome completo della risorsa e del tipo non è l'approccio consigliato. Non offre la stessa sicurezza del tipo come l'uso di uno degli altri approcci. Per ulteriori informazioni, vedere Regola di Linter: usare la proprietà principale.
Passaggi successivi
- Per informazioni sulla creazione di file Bicep, vedere Comprendere la struttura e la sintassi dei file Bicep.
- Per informazioni sul formato del nome della risorsa quando si fa riferimento alla risorsa, vedere la funzione di riferimento.