子リソースの名前と種類の設定
子リソースとは、別のリソースのコンテキスト内でのみ存在するリソースのことです。 たとえば仮想マシン拡張機能は、仮想マシンなしでは存在できません。 この拡張機能リソースが仮想マシンの子です。
各親リソースは、子リソースとして特定のリソースの種類のみを受け取ります。 子リソースのリソースの種類には、親リソースのリソースの種類が含まれます。 たとえば、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": "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 は、親リソースから引き継がれるので指定する必要はありません。
親リソースの外側
次の例は、親リソースの外側の子リソースを示しています。 親リソースが同じテンプレート内にデプロイされていない場合、または複数の子リソースを作成するために 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": "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"
}
}
]
次のステップ
- ARM テンプレート作成の詳細については、「ARM テンプレートの構造と構文の詳細」を参照してください。
- リソースを参照する際のリソース名の形式については、reference 関数の説明を参照してください。