Delen via


Fouten voor bovenliggende resources oplossen

In dit artikel wordt de fout beschreven die u kunt tegenkomen bij de implementatie van een resource die afhankelijk is van een ouderresource. De fout treedt op wanneer u resources implementeert met een Bicep-bestand of Azure Resource Manager-sjabloon (ARM-sjabloon).

Symptoom

Wanneer u een resource implementeert die een onderliggend onderdeel is van een andere resource, kan de volgende fout optreden:

Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."

Oorzaak

Wanneer de ene resource een kindresource is van een andere resource, moet de ouderresource bestaan voordat de kindresource wordt gecreëerd. De naam van de child resource definieert de verbinding met de parent resource. De naam van de kindresource heeft de indeling <parent-resource-name>/<child-resource-name>. Een SQL Database kan bijvoorbeeld worden gedefinieerd als:

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  name: '${sqlServerName}/${databaseName}'
  ...
}

Voor meer informatie over Bicep-bovenliggende en onderliggende resources, zie Naam en type instellen voor onderliggende resources in Bicep.

Als u de server en de database in dezelfde sjabloon implementeert, maar geen afhankelijkheid opgeeft op de server, kan de database-implementatie worden gestart voordat de server is geïmplementeerd. Hierdoor mislukt de database-implementatie met de ParentResourceNotFound fout.

Als de bovenliggende resource al bestaat en niet in dezelfde sjabloon is gedeployed, krijgt u de ParentResourceNotFound fout wanneer Resource Manager de onderliggende resource niet kan associëren met de bovenliggende resource. Deze fout kan optreden wanneer de kindresource niet het juiste formaat heeft. Of als de onderliggende resource wordt geïmplementeerd in een andere resourcegroep dan de resourcegroep voor de bovenliggende resource.

Oplossing 1: Geïmplementeerd in dezelfde sjabloon

Gebruik een afhankelijkheid om deze fout op te lossen wanneer ouder- en kindresources in dezelfde sjabloon worden geïmplementeerd.

In dit voorbeeld wordt een geneste onderliggende resource binnen de bovenliggende resource gebruikt, waardoor de afhankelijkheid ontstaat. Het onderliggende element haalt het resourcetype en de API-versie op van de bovenliggende resource.

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
  name: sqlServerName
  properties: {
    ...
  }
  resource sqlDatabase 'databases' = {
    name: databaseName
    ...
  }
}

Zie Resourcedeclaratie in Bicep voor meer informatie over afhankelijkheden.

Oplossing 2: Geïmplementeerd in verschillende sjablonen

Als u deze fout wilt oplossen wanneer de bovenliggende resource in een andere sjabloon is geïmplementeerd, moet u geen afhankelijkheid instellen. Rol in plaats daarvan het kind-element uit in dezelfde resourcegroep en geef de naam van de ouderresource op.

In dit voorbeeld wordt het bestaande trefwoord gebruikt om te verwijzen naar een bovenliggende ouder die in een afzonderlijk bestand is geïmplementeerd. De onderliggende resource maakt gebruik van het parent element en de symbolische naam van de bovenliggende resource.

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
}