親リソースのエラーを解決する
この記事では、親リソースに依存しているリソースをデプロイするときに起こりうる 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 - 別のテンプレートにデプロイされる
親リソースが別のテンプレートにデプロイされたときにこのエラーを解決するには、依存関係を設定せず、 子を同じリソース グループにデプロイし、親リソースの名前を与えます。
この例では、既存のキーワードを使用して、別のファイルにデプロイされた親を参照します。 子リソースは、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
}