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 podrzędnym zasobem maszyny wirtualnej.

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

W szablonie Azure Resource Manager (arm) można określić zasób podrzędny w ramach zasobu nadrzędnego 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 zasobu nadrzędnego, czy poza nim.

W ramach zasobu nadrzędnego

W poniższym przykładzie przedstawiono 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 głębokości.

W przypadku zdefiniowanych w ramach nadrzędnego typu zasobu wartości typu i nazwy są formatem jako pojedynczy segment bez ukośników.

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

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

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

Pełny typ zasobu to nadal Microsoft.Network/virtualNetworks/subnets . Nie poniesiesz Microsoft.Network/virtualNetworks/ tej informacji, ponieważ przyjmuje się ją z nadrzędnego typu zasobu.

Nazwa zasobu podrzędnego jest ustawiona na Podsieć1, ale pełna nazwa zawiera nazwę nadrzędną. Sieć VNet1 nie jest dostarczana, ponieważ zakłada się ją z zasobu nadrzędnego.

Zasób poza elementem nadrzędnym

W poniższym przykładzie przedstawiono zasób podrzędny poza zasobem nadrzędnym. Tej metody można użyć, jeśli zasób nadrzędny nie jest wdrożony w tym samym szablonie lub jeśli chcesz użyć funkcji kopiowania do utworzenia więcej niż jednego zasobu podrzędnego.

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

W przypadku definicji poza zasobem nadrzędnym należy sformatować typ i za pomocą ukośników, aby uwzględnić typ i nazwę nadrzędną.

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

W poniższym przykładzie pokazano 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 i typ jest ustawiony na Microsoft.Network/virtualNetworks/subnets . Zasób podrzędny jest oznaczony jako zależny od zasobu nadrzędnego, ponieważ zasób nadrzędny musi istnieć przed wdrożeniem zasobu podrzędnego.

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

Następne kroki