Ustawianie nazwy i typu dla zasobów podrzędnych

Zasoby podrzędne to zasoby, które istnieją tylko w kontekście innego zasobu. Na przykład rozszerzenie maszyny wirtualnej nie może istnieć bez maszyny wirtualnej. Zasób rozszerzenia jest elementem podrzędnym maszyny wirtualnej.

Każdy zasób nadrzędny akceptuje tylko niektóre typy zasobów jako zasoby podrzędne. Typ zasobu podrzędnego zawiera typ zasobu nadrzędnego. Na przykład i Microsoft.Web/sites/configMicrosoft.Web/sites/extensions są zasobami podrzędnym elementu Microsoft.Web/sites. Zaakceptowane typy zasobów są określone w schemacie szablonu zasobu nadrzędnego.

W szablonie usługi Azure Resource Manager (szablon arm) można określić zasób podrzędny w zasobie nadrzędnym lub poza zasobem nadrzędnym. Wartości podane dla nazwy zasobu i typu zasobu różnią się w zależności od tego, czy zasób podrzędny jest zdefiniowany wewnątrz lub poza zasobem nadrzędnym.

Porada

Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz zasoby podrzędne.

Zasób nadrzędny

Poniższy przykład przedstawia zasób podrzędny uwzględniony we właściwości resources zasobu nadrzędnego.

"resources": [
  {
    <parent-resource>
    "resources": [
      <child-resource>
    ]
  }
]

Zasoby podrzędne można zdefiniować tylko na pięciu poziomach.

Po zdefiniowaniu w ramach nadrzędnego typu zasobu należy sformatować wartości typu i nazwy jako pojedynczy segment bez ukośników.

"type": "{child-resource-type}",
"name": "{child-resource-name}",

W poniższym przykładzie przedstawiono sieć wirtualną i podsieć. Zwróć uwagę, że podsieć znajduje się w tablicy zasobów dla sieci wirtualnej. Nazwa jest ustawiona na Podsieć 1 , a typ jest ustawiony na podsieci. Zasób podrzędny jest oznaczony jako zależny od zasobu nadrzędnego, ponieważ przed wdrożeniem zasobu podrzędnego musi istnieć zasób nadrzędny.

"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2022-11-01",
    "name": "VNet1",
    "location": "[parameters('location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    },
    "resources": [
      {
        "type": "subnets",
        "apiVersion": "2022-11-01",
        "name": "Subnet1",
        "dependsOn": [
          "VNet1"
        ],
        "properties": {
          "addressPrefix": "10.0.0.0/24"
        }
      }
    ]
  }
]

Pełny typ zasobu jest nadal Microsoft.Network/virtualNetworks/subnets. Nie podajesz Microsoft.Network/virtualNetworks/ , ponieważ przyjmuje się go od typu zasobu nadrzędnego.

Nazwa zasobu podrzędnego jest ustawiona na Podsieć Subnet1 , ale pełna nazwa zawiera nazwę nadrzędną. Nie podajesz sieci VNet1 , ponieważ przyjmuje się ją z zasobu nadrzędnego.

Zasób zewnętrzny nadrzędny

Poniższy przykład przedstawia zasób podrzędny poza zasobem nadrzędnym. Możesz użyć tej metody, jeśli zasób nadrzędny nie został wdrożony w tym samym szablonie lub jeśli chcesz użyć kopii do utworzenia więcej niż jednego zasobu podrzędnego.

"resources": [
  {
    <parent-resource>
  },
  {
    <child-resource>
  }
]

Po zdefiniowaniu poza zasobem nadrzędnym należy sformatować wartości typu i nazwy z ukośnikami, aby uwzględnić typ nadrzędny i nazwę.

"type": "{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}",
"name": "{parent-resource-name}/{child-resource-name}",

W poniższym przykładzie przedstawiono sieć wirtualną i podsieć, które są zdefiniowane na poziomie głównym. Zwróć uwagę, że podsieć nie jest uwzględniona w tablicy zasobów dla sieci wirtualnej. Nazwa jest ustawiona na VNet1/Subnet1 , a typ ma wartość Microsoft.Network/virtualNetworks/subnets. Zasób podrzędny jest oznaczony jako zależny od zasobu nadrzędnego, ponieważ przed wdrożeniem zasobu podrzędnego musi istnieć zasób nadrzędny.

"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2022-11-01",
    "name": "VNet1",
    "location": "[parameters('location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    }
  },
  {
    "type": "Microsoft.Network/virtualNetworks/subnets",
    "apiVersion": "2022-11-01",
    "name": "VNet1/Subnet1",
    "dependsOn": [
      "VNet1"
    ],
    "properties": {
      "addressPrefix": "10.0.0.0/24"
    }
  }
]

Następne kroki