次の方法で共有


親リソースのエラーを解決する

この記事では、親リソースに依存するリソースをデプロイするときに発生する可能性のある 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
}