子リソースの名前と種類の設定Set name and type for child resources

子リソースとは、別のリソースのコンテキスト内でのみ存在するリソースのことです。Child resources are resources that exist only within the context of another resource. たとえば仮想マシン拡張機能は、仮想マシンなしでは存在できません。For example, a virtual machine extension can't exist without a virtual machine. この拡張機能リソースが仮想マシンの子です。The extension resource is a child of the virtual machine.

Resource Manager テンプレートでは、親リソースの内側または外側で子リソースを指定できます。In a Resource Manager template, you can specify the child resource either within the parent resource or outside of the parent resource. 次の例は、親リソースの resources プロパティ内に追加された子リソースを示しています。The following example shows the child resource included within the resources property of the parent resource.

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

次の例は、親リソースの外側の子リソースを示しています。The next example shows the child resource outside of the parent resource. 親リソースが同じテンプレート内にデプロイされていない場合、または複数の子リソースを作成するために copy を使う場合は、このアプローチを使用することがあります。You might use this approach if the parent resource isn't deployed in the same template, or if want to use copy to create more than one child resource.

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

リソースの名前と種類に指定する値は、子リソースが親リソースの内側で定義されているか、親リソースの外側で定義されているかによって変わります。The values you provide for the resource name and type vary based on whether the child resource is defined inside or outside of the parent resource.

親リソースの内側Within parent resource

親リソースの type 内に type と name の値を定義するときは、スラッシュを使わず 1 つの単語として書式設定します。When defined within the parent resource type, you format the type and name values as a single word without slashes.

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

次に示したのは、サブネットを含んだ仮想ネットワークの例です。The following example shows a virtual network and with a subnet. 仮想ネットワークの resources 配列内にサブネットが含まれていることがわかります。Notice that the subnet is included within the resources array for the virtual network. name が Subnet1 に設定され、type が subnets に設定されています。The name is set to Subnet1 and the type is set to subnets. 子リソースは、親リソースに依存するリソースとしてマークされています。子リソースをデプロイするためには、先に親リソースが存在していなければならないためです。The child resource is marked as dependent on the parent resource because the parent resource must exist before the child resource can be deployed.

"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",
        "location": "[parameters('location')]",
        "dependsOn": [
          "VNet1"
        ],
        "properties": {
          "addressPrefix": "10.0.0.0/24"
        }
      }
    ]
  }
]

完全なリソースの種類は、あくまで Microsoft.Network/virtualNetworks/subnets になります。The full resource type is still Microsoft.Network/virtualNetworks/subnets. Microsoft.Network/virtualNetworks/ は、親リソースの種類から引き継がれるので指定する必要はありません。You don't provide Microsoft.Network/virtualNetworks/ because it's assumed from the parent resource type.

子リソースの名前は Subnet1 に設定されていますが、完全名には親の名前が含まれます。The child resource name is set to Subnet1 but the full name includes the parent name. VNet1 は、親リソースから引き継がれるので指定する必要はありません。You don't provide VNet1 because it's assumed from the parent resource.

親リソースの外側Outside parent resource

親リソースの外側に type と name を定義するときは、スラッシュを使って親の種類と名前を含めるように書式設定します。When defined outside of the parent resource, you format the type and with slashes to include the parent type and name.

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

次の例に示した仮想ネットワークとサブネットは、どちらもルート レベルで定義されています。The following example shows a virtual network and subnet that are both defined at the root level. 仮想ネットワークの resources 配列内にはサブネットが含まれていないことがわかります。Notice that the subnet isn't included within the resources array for the virtual network. name が VNet1/Subnet1 に設定され、type が Microsoft.Network/virtualNetworks/subnets に設定されています。The name is set to VNet1/Subnet1 and the type is set to Microsoft.Network/virtualNetworks/subnets. 子リソースは、親リソースに依存するリソースとしてマークされています。子リソースをデプロイするためには、先に親リソースが存在していなければならないためです。The child resource is marked as dependent on the parent resource because the parent resource must exist before the child resource can be deployed.

"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",
    "location": "[parameters('location')]",
    "name": "VNet1/Subnet1",
    "dependsOn": [
      "VNet1"
    ],
    "properties": {
      "addressPrefix": "10.0.0.0/24"
    }
  }
]

次のステップNext steps

  • Azure リソース マネージャーのテンプレートの作成の詳細については、 テンプレートの作成に関するページを参照してください。To learn about creating Azure Resource Manager templates, see Authoring templates.

  • リソースを参照する際のリソース名の形式については、reference 関数の説明を参照してください。To learn about the format of the resource name when referencing the resource, see the reference function.