この記事では、親リソースに依存するリソースをデプロイするときに発生する可能性のある ParentResourceNotFound
エラーについて説明します。 このエラーは、Bicep ファイルまたは Azure Resource Manager テンプレート (ARM テンプレート) を使用してリソースをデプロイするときに発生します。
症状
子であるリソースを別のリソースにデプロイすると、次のエラーが表示される場合があります。
Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."
原因
あるリソースが別のリソースの子である場合、親リソースは子リソースが作成される前に存在している必要があります。 子リソースの名前は、親リソースとの接続を定義します。 子リソースの名前は、 <parent-resource-name>/<child-resource-name>
の形式です。 たとえば、SQL Database は次のように定義できます。
resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
name: '${sqlServerName}/${databaseName}'
...
}
Bicep の親リソースと子リソースの詳細については、「 Bicep で子リソースの名前と種類を設定する」を参照してください。
サーバーとデータベースを同じテンプレートにデプロイし、サーバーへの依存関係を指定しない場合、サーバーのデプロイ前にデータベースのデプロイが開始される可能性があります。 これにより、データベースのデプロイが ParentResourceNotFound
エラーで失敗します。
親リソースが既に存在し、同じテンプレートにデプロイされていない場合、Resource Manager が子リソースを親に関連付けることができないと、 ParentResourceNotFound
エラーが発生します。 このエラーは、子リソースが正しい形式でない場合に発生する可能性があります。 または、子リソースが親リソースのリソース グループとは異なるリソース グループにデプロイされている場合。
解決策 1: 同じテンプレートにデプロイする
親リソースと子リソースが同じテンプレートにデプロイされている場合にこのエラーを解決するには、依存関係を使用します。
この例では、親リソース内の入れ子になった子リソースを使用し、それによって依存関係が作成されます。 子は、親リソースからリソースの種類と API バージョンを取得します。
resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
name: sqlServerName
properties: {
...
}
resource sqlDatabase 'databases' = {
name: databaseName
...
}
}
依存関係の詳細については、「 Bicep でのリソース宣言」を参照してください。
解決策 2: 異なるテンプレートでデプロイする
親リソースが別のテンプレートにデプロイされたときにこのエラーを解決するには、依存関係を設定しないでください。 代わりに、子を同じリソース グループにデプロイし、親リソースの名前を指定します。
この例では、 existing キーワードを使用して、別のファイルにデプロイされた親を参照します。 子リソースは、 parent
要素と親リソースのシンボリック名を使用します。
param ___location string = resourceGroup().___location
param sqlServerName string
param databaseName string
resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' existing = {
name: sqlServerName
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
parent: sqlServer
name: databaseName
___location: ___location
}