Condividi tramite


Impostare il nome e il tipo per le risorse figlio in Bicep

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 figlio. 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

Per avere informazioni più dettagliate sulle risorse figlio, vedere Distribuire risorse figlio e di estensione 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 figlio. Tuttavia, il nome completo e il tipo si risolvono sempre nello stesso modello.

Il nome completo della risorsa figlio usa 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 usa 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 padre

Nell'esempio seguente viene illustrata la risorsa figlio inclusa nella proprietà risorse 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 visualizzata al livello superiore della sintassi della risorsa padre. Le dichiarazioni possono essere annidate in modo arbitrario, purché ogni livello sia un tipo figlio della relativa risorsa padre.

Quando definito all'interno del tipo di risorsa padre, formatta i valori di tipo e di nome 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 su exampleshare e il relativo tipo è impostato su shares.

resource storage 'Microsoft.Storage/storageAccounts@2023-04-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 si specifica Microsoft.Storage/storageAccounts/ perché viene ottenuto dal tipo della risorsa padre e della versione. 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 figlio sono impostati su default e exampleshare ma i nomi completi includono i nomi padre. Non si specifica examplestorage o default perché si presuppone che provengano dalla risorsa padre.

Una risorsa nidificata può accedere alle proprietà della risorsa padre. Altre risorse dichiarate all'interno del corpo della stessa risorsa padre possono farvi riferimento usando i nomi simbolici. Una risorsa padre potrebbe non accedere alle proprietà delle risorse contenute, e questo tentativo causerebbe una dipendenza cicliche.

Per fare riferimento a una risorsa nidificata all'esterno della risorsa padre, deve essere qualificata con il nome della risorsa contenitore e l'operatore ::. Ad esempio, per restituire una proprietà da una risorsa figlio:

output childAddressPrefix string = VNet1::VNet1_Subnet1.properties.addressPrefix

Risorsa padre esterna

Nell'esempio seguente viene illustrata la risorsa figlio all'esterno della risorsa padre. Questo approccio potrebbe essere usato 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à padre nell'elemento figlio con il valore impostato sul nome simbolico dell'elemento padre. Con questa sintassi è comunque necessario dichiarare il tipo di risorsa completo, ma il nome della risorsa figlio è solo il nome dell'elemento 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>
}

Se definito all'esterno della risorsa padre, formattare il tipo e con barre per includere il tipo e il nome 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@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
}

Fare riferimento al nome simbolico della risorsa figlio equivale a fare riferimento all'elemento padre.

Nome completo della risorsa esterna all'elemento padre

È anche possibile usare il nome completo della risorsa e il tipo quando si dichiara la risorsa figlio all'esterno dell'elemento padre. Non si imposta la proprietà padre sulla risorsa figlio. Poiché la dipendenza non può essere dedotta, è necessario impostarla in modo esplicito.

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: 'examplestorage/default'
  dependsOn: [
    storage
  ]
}

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
  name: 'examplestorage/default/exampleshare'
  dependsOn: [
    service
  ]
}

Importante

L'impostazione del nome completo della risorsa e del tipo non è l'approccio consigliato. Non è un tipo sicuro come l'uso di uno degli altri approcci. Per altre informazioni, vedere regola Linter: usare la proprietà padre.

Passaggi successivi