Nastavení názvu a typu pro podřízené prostředky v Bicepu

Podřízené prostředky jsou prostředky, které existují pouze v kontextu jiného prostředku. Například rozšíření virtuálního počítače nemůže existovat bez virtuálního počítače. Prostředek rozšíření je podřízeným prostředkem virtuálního počítače.

Každý nadřazený prostředek přijímá jako podřízené prostředky pouze určité typy prostředků. Hierarchie typů prostředků je k dispozici v referenčních informacích k prostředkům Bicep.

Tento článek ukazuje různé způsoby, jak deklarovat podřízený prostředek.

Školicí materiály

Pokud byste se raději dozvěděli o podřízených prostředcích prostřednictvím podrobných pokynů, přečtěte si téma Nasazení podřízených a rozšiřujících prostředků pomocí bicepu.

Vzor názvu a typu

V nástroji Bicep můžete zadat podřízený prostředek buď v rámci nadřazeného prostředku, nebo mimo nadřazený prostředek. Hodnoty, které zadáte pro název a typ prostředku, se liší v závislosti na tom, jak deklarujete podřízený prostředek. Celé jméno a typ se ale vždy přeloží na stejný vzor.

Úplný název podřízeného prostředku používá vzor:

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

Pokud máte v hierarchii více než dvě úrovně, opakujte názvy nadřazených položek:

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

Úplný typ podřízeného prostředku používá vzor:

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

Pokud máte v hierarchii více než dvě úrovně, opakujte nadřazené typy prostředků:

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

Pokud počítáte segmenty mezi / znaky, je počet segmentů typu vždy o jeden větší než počet segmentů v názvu.

V rámci nadřazeného prostředku

Následující příklad ukazuje podřízený prostředek zahrnutý do vlastnosti resources nadřazeného prostředku.

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

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

Deklarace vnořeného prostředku se musí zobrazit na nejvyšší úrovni syntaxe nadřazeného prostředku. Deklarace můžou být vnořené libovolně hluboko, pokud je každá úroveň podřízeným typem nadřazeného prostředku.

Při definování v rámci nadřazeného typu prostředku naformátujete hodnoty typu a názvu jako jeden segment bez lomítek. Následující příklad ukazuje účet úložiště s podřízeným prostředkem pro souborovou službu a souborová služba má pro sdílenou složku podřízený prostředek. Název souborové služby je nastavený na default a její typ je nastavený na fileServices. Název sdílené složky je nastavený exampleshare a její typ je nastavený na 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'
    }
  }
}

Úplné typy prostředků jsou stále Microsoft.Storage/storageAccounts/fileServices a Microsoft.Storage/storageAccounts/fileServices/shares. Nezadáte Microsoft.Storage/storageAccounts/ , protože se předpokládá z nadřazeného typu a verze prostředku. Vnořený prostředek může volitelně deklarovat verzi rozhraní API pomocí syntaxe <segment>@<version>. Pokud vnořený prostředek vynechá verzi rozhraní API, použije se verze rozhraní API nadřazeného prostředku. Pokud vnořený prostředek určuje verzi rozhraní API, použije se zadaná verze rozhraní API.

Názvy podřízených prostředků jsou nastavené na default a, exampleshare ale úplná jména obsahují nadřazené názvy. Nezadáte examplestorage je, nebo default proto, že se předpokládá z nadřazeného prostředku.

Vnořený prostředek má přístup k vlastnostem svého nadřazeného prostředku. Jiné prostředky deklarované v těle stejného nadřazeného prostředku se můžou vzájemně odkazovat pomocí symbolických názvů. Nadřazený prostředek nemusí přistupovat k vlastnostem prostředků, které obsahuje. Tento pokus by způsobil cyklickou závislost.

Pokud chcete odkazovat na vnořený prostředek mimo nadřazený prostředek, musí být kvalifikovaný pomocí názvu obsahujícího prostředku a operátoru :: . Například výstup vlastnosti z podřízeného prostředku:

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

Mimo nadřazený prostředek

Následující příklad ukazuje podřízený prostředek mimo nadřazený prostředek. Tento přístup můžete použít, pokud nadřazený prostředek není nasazený ve stejné šabloně nebo pokud chcete použít smyčku k vytvoření více než jednoho podřízeného prostředku. Zadejte nadřazenou vlastnost podřízeného objektu s hodnotou nastavenou na symbolický název nadřazeného objektu. U této syntaxe je stále potřeba deklarovat úplný typ prostředku, ale název podřízeného prostředku je pouze název podřízeného prostředku.

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

Při definování mimo nadřazený prostředek naformátujete typ a pomocí lomítek tak, aby zahrnoval nadřazený typ a název.

Následující příklad ukazuje účet úložiště, souborovou službu a sdílenou složku, které jsou všechny definované na kořenové úrovni.

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
}

Odkazování na symbolický název podřízeného prostředku funguje stejně jako odkazování na nadřazený prostředek.

Úplný název prostředku mimo nadřazený objekt

Při deklarování podřízeného prostředku mimo nadřazený můžete také použít úplný název a typ prostředku. U podřízeného prostředku nenastavíte nadřazenou vlastnost. Vzhledem k tomu, že závislost nelze odvodit, musíte ji explicitně nastavit.

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

Důležité

Nastavení úplného názvu a typu prostředku není doporučený postup. Není to tak bezpečné jako použití některého z ostatních přístupů. Další informace najdete v tématu Pravidlo Linter: použití nadřazené vlastnosti.

Další kroky