子リソースとは、別のリソースのコンテキスト内でのみ存在するリソースのことです。 たとえば、 仮想マシン拡張機能 は、 仮想マシンなしでは存在できません。 拡張リソースは、仮想マシンの子です。
各親リソースは、特定のリソースタイプのみを子リソースとして受け入れます。 リソースの種類の階層については、 Bicep リソース リファレンスを参照してください。
この記事では、子リソースを宣言するさまざまな方法を示します。
トレーニング リソース
子リソースについてステップバイステップのガイダンスで学習する場合は、「 Bicep を使用して子リソースと拡張機能リソースをデプロイする」を参照してください。
名前と型パターン
Bicep では、親リソース内または親リソースの外部に子リソースを指定できます。 リソース名とリソースタイプに指定する値は、子リソースの宣言方法によって異なります。 ただし、フルネームとタイプは常に同じパターンに解決されます。
子リソース の完全な名前 では、次のパターンが使用されます。
{parent-resource-name}/{child-resource-name}
階層に 2 つ以上のレベルがある場合は、親の名前を繰り返し続けます。
{parent-resource-name}/{child-level1-resource-name}/{child-level2-resource-name}
子リソース の完全な型 は、次のパターンを使用します。
{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}
階層に 2 つ以上のレベルがある場合は、親リソースの種類を繰り返し続けます。
{resource-provider-namespace}/{parent-resource-type}/{child-level1-resource-type}/{child-level2-resource-type}
/
文字間のセグメントを数えると、タイプ内のセグメント数は常に名前のセグメント数より 1 つ多くなります。
親リソース内
次の例は、親リソースの resources プロパティに含まれる子リソースを示しています。
resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
<parent-resource-properties>
resource <child-resource-symbolic-name> '<child-resource-type>' = {
<child-resource-properties>
}
}
ネストされたリソース宣言は、親リソースの構文の最上位レベルに記述する必要があります。 宣言は、各レベルがその親リソースの子型である限り、任意に深くネストできます。
親リソース・タイプ内で定義する場合は、タイプと名前の値をスラッシュなしの単一のセグメントとしてフォーマットします。 次の例は、ファイル サービスの子リソースを持つストレージ アカウントと、ファイル サービスにファイル共有の子リソースがあることを示しています。 ファイル サービスの名前は default
に設定され、その種類は fileServices
に設定されます。 ファイル共有の名前は exampleshare
に設定され、その種類は shares
に設定されます。
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: 'examplestorage'
___location: resourceGroup().___location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
resource service 'fileServices' = {
name: 'default'
resource share 'shares' = {
name: 'exampleshare'
}
}
}
完全なリソースの種類は、まだ Microsoft.Storage/storageAccounts/fileServices
と Microsoft.Storage/storageAccounts/fileServices/shares
です。
Microsoft.Storage/storageAccounts/
は親リソースの種類とバージョンから想定されるため、指定しません。 ネストされたリソースは、オプションで構文 <segment>@<version>
を使用して API バージョンを宣言できます。 ネストされたリソースで API バージョンが省略されている場合は、親リソースの API バージョンが使用されます。 ネストされたリソースで API バージョンが指定されている場合は、指定された API バージョンが使用されます。
子リソースの名前は default
と exampleshare
に設定されていますが、フルネームには親の名前が含まれます。
examplestorage
やdefault
は親リソースから想定されているため、提供しません。
ネストされたリソースは、親リソースのプロパティにアクセスできます。 同じ親リソースの本体内で宣言された他のリソースは、シンボリック名を使用して相互に参照できます。 親リソースは、それに含まれるリソースのプロパティにアクセスできない場合があり、この試みは循環依存関係を引き起こします。
親リソースの外部にあるネストされたリソースを参照するには、そのリソースは、包含リソース名と ::
演算子で修飾する必要があります。 たとえば、子リソースからプロパティを出力するには、次のようにします。
output childAddressPrefix string = VNet1::VNet1_Subnet1.properties.addressPrefix
外部親リソース
次の例は、親リソースの外部にある子リソースを示しています。 この方法は、親リソースが同じテンプレートにデプロイされていない場合、 またはループ を使用して複数の子リソースを作成する場合に使用できます。 子の parent プロパティを指定し、値を親のシンボリック名に設定します。 この構文では、完全なリソースタイプを宣言する必要がありますが、子リソースの名前は子の名前のみです。
resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
name: 'myParent'
<parent-resource-properties>
}
resource <child-resource-symbolic-name> '<child-resource-type>@<api-version>' = {
parent: <parent-resource-symbolic-name>
name: 'myChild'
<child-resource-properties>
}
親リソースの外部で定義する場合は、親のタイプと名前を含めるために、タイプとスラッシュでフォーマットします。
次の例は、ストレージ アカウント、ファイル サービス、およびファイル共有のすべてがルート レベルで定義されていることを示しています。
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: 'examplestorage'
___location: resourceGroup().___location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2024-01-01' = {
name: 'default'
parent: storage
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2024-01-01' = {
name: 'exampleshare'
parent: service
}
子リソースのシンボリック名を参照することは、親を参照することと同じように機能します。
親以外の完全なリソース名
また、親の外部で子リソースを宣言するときに、完全なリソース名とタイプを使用することもできます。 子リソースに parent プロパティは設定しません。 依存関係は推論できないため、明示的に設定する必要があります。
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: 'examplestorage'
___location: resourceGroup().___location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource service 'Microsoft.Storage/storageAccounts/fileServices@2024-01-01' = {
name: 'examplestorage/default'
dependsOn: [
storage
]
}
resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2024-01-01' = {
name: 'examplestorage/default/exampleshare'
dependsOn: [
service
]
}
Von Bedeutung
完全なリソース名と種類を設定することは、推奨される方法ではありません。 これは、他のアプローチの 1 つを使用する場合ほどタイプ セーフではありません。 詳細については、「 リンター ルール: 親プロパティを使用する」を参照してください。
次のステップ
- Bicep ファイルの作成の詳細については、「 Bicep ファイルの構造と構文について」を参照してください。
- リソースを参照する場合のリソース名の形式については、 reference 関数を参照してください。