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

Le risorse figlio sono risorse esistenti solo all'interno del contesto di un'altra risorsa. Ad esempio, un'estensione di 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 nel riferimento alla risorsa Bicep.

Questo articolo illustra diversi modi per dichiarare una risorsa figlio.

Risorse di formazione

Se si preferisce informazioni sulle risorse figlio tramite istruzioni dettagliate, vedere Distribuire risorse figlio e estensione usando Bicep.

Modello di 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 al modo in cui si dichiara la 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 conteggiano 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 annidata deve essere visualizzata a livello superiore di sintassi della risorsa padre. Le dichiarazioni possono essere annidate arbitrariamente, purché ogni livello sia un tipo figlio della risorsa padre.

Se definito all'interno del tipo di risorsa padre, formattare i valori di tipo e nome come singolo segmento senza barre. Nell'esempio seguente viene illustrato 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@2022-09-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 viene fornito Microsoft.Storage/storageAccounts/ perché viene assunto dal tipo di risorsa padre e dalla versione. La risorsa annidata 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 vengono forniti examplestorage o default perché vengono assunti dalla risorsa padre.

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

Per fare riferimento a una risorsa annidata all'esterno della risorsa padre, deve essere qualificata con il nome della risorsa contenente 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. È possibile usare questo approccio se la risorsa padre non è distribuita nello stesso modello o se si vuole usare un ciclo per creare più risorse figlio. Specificare la proprietà padre sul 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 padre e il nome.

Nell'esempio seguente viene illustrato un account di archiviazione, un servizio file e una condivisione file che sono tutti definiti a livello radice.

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2022-09-01' = {
  name: 'default'
  parent: storage
}

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2022-09-01' = {
  name: 'exampleshare'
  parent: service
}

Il riferimento al nome simbolico della risorsa figlio funziona allo stesso modo in cui si fa 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 nella risorsa figlio. Poiché non è possibile dedurre la dipendenza, è necessario impostarla in modo esplicito.

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2022-09-01' = {
  name: 'examplestorage/default'
  dependsOn: [
    storage
  ]
}

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

Importante

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

Passaggi successivi