Sdílet prostřednictvím


Nastavte název a typ podřízených prostředků v Bicep

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

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é možnosti, 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 kroků, podívejte se na příručku Nasazení podřízených a rozšiřujících prostředků pomocí Bicep.

Název a vzor typu

V rámci Bicepu 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 prostředku a typ prostředku, se liší podle toho, jak deklarujete podřízený prostředek. Úplný název a typ vždy vyústí ve stejný vzor.

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

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

Pokud máte v hierarchii více než dvě úrovně, stále opakujte názvy nadřazených úrovní.

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

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

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

Pokud máte v hierarchii více než dvě úrovně, pokračujte v opakování nadřazených typů prostředků:

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

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

V rámci nadřazeného zdroje

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 musí být uvedena na nejvyšší úrovni v syntaxi rodičovského prostředku. Deklarace mohou být vnořeny libovolně hluboko, pokud každá úroveň odpovídá podřízenému typu 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á podřízený prostředek pro sdílenou složku. Název souborové služby je nastaven na default a jeho typ je nastaven na fileServices. Název sdílené složky je nastaven exampleshare a jeho typ je nastaven na 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'
    }
  }
}

Úplné typy prostředků jsou stále Microsoft.Storage/storageAccounts/fileServices a Microsoft.Storage/storageAccounts/fileServices/shares. Neposkytujete Microsoft.Storage/storageAccounts/, protože se to předpokládá dle typu a verze nadřazeného 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é názvy obsahují názvy nadřazených prostředků. Neposkytujete examplestorage nebo default protože se předpokládá z nadřazeného prostředku.

Vnořený prostředek má přístup k vlastnostem nadřazeného prostředku. Jiné prostředky deklarované uvnitř těla stejného nadřazeného prostředku mohou vzájemně odkazovat pomocí symbolických názvů. Nadřazený prostředek nemusí přistupovat k vlastnostem prostředků, které obsahuje, a 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ý s názvem obsahujícím prostředek a operátorem :: . Například výstup vlastnosti z podřízeného prostředku:

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

Vnější rodičovský zdroj

Následující příklad ukazuje podřízené zdroje odděleně od nadřazeného zdroje. 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é položky s hodnotou nastavenou na symbolický název nadřazeného objektu. S touto syntaxí stále potřebujete 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 název s lomítky tak, aby zahrnuly 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 definovány na kořenové úrovni.

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
}

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

Úplný název a typ prostředku lze také použít při deklarování podřízeného prostředku mimo nadřazený prostředek. Vlastnost nadřazeného pro podřízený prostředek nenastavujete. Vzhledem k tomu, že závislost nelze odvodit, musíte ji explicitně nastavit.

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

Důležité

Nastavení úplného názvu prostředku a typu není doporučeným přístupem. Není tak typově bezpečné jako použití jednoho z dalších přístupů. Další informace naleznete v tématu Pravidlo pro Linter: použití nadřazené vlastnosti.

Další kroky