Dela via


Specificera namn och typ för underordnade resurser i Bicep

Underordnade resurser är resurser som bara finns i kontexten för en annan resurs. Ett tillägg för virtuella datorer kan till exempel inte finnas utan en virtuell dator. Tilläggsresursen är en del av den virtuella datorn.

Varje överordnad resurs accepterar endast vissa resurstyper som underordnade resurser. Hierarkin med resurstyper är tillgänglig i Bicep-resursreferensen.

Den här artikeln visar olika sätt att definiera en underordnad resurs.

Utbildningsresurser

Om du hellre vill lära dig om barnresurser genom vägledning steg för steg, se Distribuera barn- och utökade resurser med hjälp av Bicep.

Namn och typmönster

I Bicep kan du ange den underordnade resursen antingen inom eller utanför den överordnade resursen. De värden som du anger för resursnamnet och resurstypen varierar beroende på hur du deklarerar den underordnade resursen. Det fullständiga namnet och typen matchar dock alltid samma mönster.

Det fullständiga namnet på den underordnade resursen följer mönstret:

{parent-resource-name}/{child-resource-name}

Om du har fler än två nivåer i hierarkin, fortsätt att upprepa föräldernamn:

{parent-resource-name}/{child-level1-resource-name}/{child-level2-resource-name}

Den fullständiga typen av barnresursen använder mönstret:

{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}

Om du har fler än två nivåer i hierarkin fortsätter du att upprepa överordnade resurstyper:

{resource-provider-namespace}/{parent-resource-type}/{child-level1-resource-type}/{child-level2-resource-type}

Om du räknar segmenten mellan / tecken är antalet segment i typen alltid ett fler än antalet segment i namnet.

Inom den överordnade resursen

I det följande exemplet visas den underordnade resursen som ingår i resursegendomen hos den överordnade resursen.

resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
  <parent-resource-properties>

  resource <child-resource-symbolic-name> '<child-resource-type>' = {
    <child-resource-properties>
  }
}

En kapslad resursdeklaration måste visas på den översta syntaxnivån för den överordnade resursen. Deklarationer kan kapslas godtyckligt djupt, så länge varje nivå är en underordnad typ av dess överordnade resurs.

När du har definierade inom den överordnade resurstypen formaterar du typ- och namnvärdena som ett enskilt segment utan snedstreck. I följande exempel visas ett lagringskonto med en underordnad resurs för filtjänsten och filtjänsten har en underordnad resurs för fildelningen. Filtjänstens namn är inställt på default och dess typ är inställd på fileServices. Filresursens namn har angetts exampleshare och dess typ är inställd på 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'
    }
  }
}

De fullständiga resurstyperna är fortfarande Microsoft.Storage/storageAccounts/fileServices och Microsoft.Storage/storageAccounts/fileServices/shares. Du anger inte Microsoft.Storage/storageAccounts/ eftersom det framgår av den överordnade resurstypen och versionen. Den kapslade resursen kan eventuellt deklarera en API-version med hjälp av syntaxen <segment>@<version>. Om den kapslade resursen utelämnar API-versionen används API-versionen av den överordnade resursen. Om den kapslade resursen anger en API-version används den angivna API-versionen.

De underordnade resursnamnen är inställda på default och exampleshare men de fullständiga namnen innehåller de överordnade namnen. Du anger inte examplestorage eller default eftersom de antas från den överordnade resursen.

En kapslad resurs kan komma åt egenskaperna för den överordnade resursen. Andra resurser som deklareras i brödtexten för samma överordnade resurs kan referera till varandra med hjälp av de symboliska namnen. En överordnad resurs kanske inte kommer åt egenskaperna för de resurser som den innehåller. Det här försöket skulle orsaka ett cykliskt beroende.

Om du vill referera till en kapslad resurs utanför den överordnade resursen måste den vara kvalificerad med det innehållande resursnamnet och operatorn :: . Om du till exempel vill mata ut en egenskap från en underordnad resurs:

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

Extern överordnad resurs

I följande exempel visas den underordnade resursen utanför den överordnade resursen. Du kan använda den här metoden om den överordnade resursen inte distribueras i samma mall eller om du vill använda en loop för att skapa fler än en underordnad resurs. Ange den överordnade egenskapen för det underordnade med värdet inställt på det symboliska namnet på den överordnade. Med den här syntaxen måste du fortfarande deklarera den fullständiga resurstypen, men namnet på den underordnade resursen är bara namnet på den underordnade resursen.

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>
}

När den definieras utanför den överordnade resursen formaterar du typen med snedstreck för att inkludera den överordnade typen och namnet.

I följande exempel visas ett lagringskonto, en filtjänst och en filresurs som alla definieras på rotnivå.

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
}

Att referera till den underordnade resursens symboliska namn fungerar på samma sätt som att referera till den överordnade resursen.

Fullständigt resursnamn utanför förälder

Du kan också använda det fullständiga resursnamnet och typen när du deklarerar den underordnade resursen utanför den överordnade resursen. Du anger inte förälder-egenskapen för den underordnade resursen. Eftersom beroendet inte kan härledas måste du ange det explicit.

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
  ]
}

Viktigt!

Att ange det fullständiga resursnamnet och typen är inte den rekommenderade metoden. Det är inte lika typsäkert som att använda en annan metod. För mer information, se Linter-regel: använd överordnad egenskap.

Nästa steg