設定子資源的名稱和類型

子資源是只存在於另一個資源內容中的資源。 例如,虛擬機器擴充功能 (英文) 無法在沒有虛擬機器 (英文) 的情況下存在。 擴充功能資源是虛擬機器的子資源。

每個父資源只接受特定的資源類型做為子資源。 子資源的資源類型包括父資源的資源類型。 例如,Microsoft.Web/sites/configMicrosoft.Web/sites/extensions 都是 Microsoft.Web/sites 的子資源。 可接受的資源類型是在父資源的 範本結構描述 中指定。

在 Azure Resource Manager 範本 (ARM 範本) 中,您可以在父資源或父資源外部指定子資源。 您為資源名稱和資源類型所提供的值會根據子資源是在父資源內部或外部所定義而有所不同。

提示

我們建議使用 Bicep,因為其提供的功能與 ARM 範本相同,而且語法更易於使用。 若要深入了解,請參閱子資源

在父資源內

下列範例顯示了父資源的資源屬性內所包含的子資源。

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

定義子資源時,深度只能有 5 層。

當在父代資源類型內定義時,請將類型和名稱值的格式設為不使用斜線的單一區段。

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

下列範例顯示具有子網路的虛擬網路。 請注意,子網路包括在虛擬網路的資源陣列中。 名稱設為 Subnet1,而類型設為subnets (子網路)。 子資源會標示為與父資源相依,因為父資源必須存在,才能部署子資源。

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

完整的資源類型仍為 Microsoft.Network/virtualNetworks/subnets。 您未提供 Microsoft.Network/virtualNetworks/,因為它被認為是來自父資源類型。

子資源名稱會設為 Subnet1,但是完整名稱會包括父名稱。 您不須提供 VNet1,因為系統會從父代資源取得。

父資源外部

下列範例展示了父資源外部的子資源。 如果父資源並未部署在相同範本中,或者想要使用複製來建立多個子資源,您可以使用此方法。

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

在父資源外部定義時,您會將類型和名稱值格式化,並使用斜線來包括父類型和名稱。

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

下列範例會顯示在根等級定義的虛擬網路和子網路。 請注意,子網路未包括在虛擬網路的資源陣列中。 名稱設為 VNet1/Subnet1,而類型設為 Microsoft.Network/virtualNetworks/subnets。 子資源會標示為與父資源相依,因為父資源必須存在,才能部署子資源。

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

下一步