子リソースとは、別のリソースのコンテキスト内でのみ存在するリソースのことです。 たとえば仮想マシン拡張機能は、仮想マシンなしでは存在できません。 この拡張機能リソースが仮想マシンの子です。
各親リソースは、子リソースとして特定のリソースの種類のみを受け取ります。 子リソースのリソースの種類には、親リソースのリソースの種類が含まれます。 たとえば、Microsoft.Web/sites/config と Microsoft.Web/sites/extensions は、どちらも Microsoft.Web/sites の子リソースです。 許容されるリソースの種類は、親リソースのテンプレート スキーマで指定されます。
Azure Resource Manager テンプレート (ARM テンプレート) では、親リソースの内側または外側に子リソースを指定できます。 リソースの名前とリソースの種類に指定する値は、子リソースが親リソースの内側で定義されているか、外側で定義されているかによって変わります。
親リソースの内側
次の例は、親リソースの resources プロパティ内に追加された子リソースを示しています。
"resources": [
  {
    <parent-resource>
    "resources": [
      <child-resource>
    ]
  }
]
子リソースの定義の深さは 5 レベルまでです。
親リソースの type 内に type と name の値を定義するときは、スラッシュを使わず 1 つのセグメントとして書式設定します。
"type": "{child-resource-type}",
"name": "{child-resource-name}",
次に示したのは、サブネットを含んだ仮想ネットワークの例です。 仮想ネットワークの resources 配列内にサブネットが含まれていることがわかります。 name が Subnet1 に設定され、type が subnets に設定されています。 子リソースは、親リソースに依存するリソースとしてマークされています。子リソースをデプロイするためには、先に親リソースが存在していなければならないためです。
"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2024-07-01",
    "name": "VNet1",
    "___location": "[parameters('___location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    },
    "resources": [
      {
        "type": "subnets",
        "apiVersion": "2024-07-01",
        "name": "Subnet1",
        "dependsOn": [
          "VNet1"
        ],
        "properties": {
          "addressPrefix": "10.0.0.0/24"
        }
      }
    ]
  }
]
完全なリソースの種類は、あくまで Microsoft.Network/virtualNetworks/subnets になります。 親リソースの種類から想定されるため、Microsoft.Network/virtualNetworks/ は不要です。
子リソースの名前は Subnet1 に設定されていますが、完全名には親の名前が含まれます。 VNet1 は、親リソースから引き継がれるので指定する必要はありません。
親リソースの外側
次の例は、親リソースの外側の子リソースを示しています。 親リソースが同じテンプレート内にデプロイされていない場合、または複数の子リソースを作成するために copy を使う場合は、このアプローチを使用することがあります。
"resources": [
  {
    <parent-resource>
  },
  {
    <child-resource>
  }
]
親リソースの外側に定義するときは、スラッシュを使って親の種類と名前を含めるように type と name の値を書式設定します。
"type": "{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}",
"name": "{parent-resource-name}/{child-resource-name}",
次の例に示した仮想ネットワークとサブネットは、どちらもルート レベルで定義されています。 仮想ネットワークの resources 配列内にはサブネットが含まれていないことがわかります。 name が VNet1/Subnet1 に設定され、type が Microsoft.Network/virtualNetworks/subnets に設定されています。 子リソースは、親リソースに依存するリソースとしてマークされています。子リソースをデプロイするためには、先に親リソースが存在していなければならないためです。
"resources": [
  {
    "type": "Microsoft.Network/virtualNetworks",
    "apiVersion": "2024-07-01",
    "name": "VNet1",
    "___location": "[parameters('___location')]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "10.0.0.0/16"
        ]
      }
    }
  },
  {
    "type": "Microsoft.Network/virtualNetworks/subnets",
    "apiVersion": "2024-07-01",
    "name": "VNet1/Subnet1",
    "dependsOn": [
      "VNet1"
    ],
    "properties": {
      "addressPrefix": "10.0.0.0/24"
    }
  }
]
次のステップ
- ARM テンプレート作成の詳細については、「ARM テンプレートの構造と構文の詳細」を参照してください。
 - リソースを参照する際のリソース名の形式については、reference 関数の説明を参照してください。