Fouten voor bovenliggende resources oplossen

In dit artikel wordt de ParentResourceNotFound fout beschreven die kan optreden bij het implementeren van een resource die afhankelijk is van een bovenliggende resource. De fout treedt op wanneer u resources implementeert met een Bicep-bestand of een ARM-sjabloon (Azure Resource Manager).

Symptoom

Wanneer u een onderliggende resource implementeert in een andere resource, kan het volgende foutbericht worden weergegeven:

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

Oorzaak

Wanneer een resource een onderliggende resource is van een andere resource, moet de bovenliggende resource bestaan voordat de onderliggende resource wordt gemaakt. De naam van de onderliggende resource definieert de verbinding met de bovenliggende resource. De naam van de onderliggende resource 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}'
  ...
}

Zie Naam en type instellen voor onderliggende resources in Bicep voor meer informatie over bovenliggende en onderliggende resources van Bicep.

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

Als de bovenliggende resource al bestaat en niet in dezelfde sjabloon is geïmplementeerd, krijgt u de ParentResourceNotFound fout wanneer Resource Manager de onderliggende resource niet aan een bovenliggende resource kunt koppelen. Deze fout kan optreden wanneer de onderliggende resource niet de juiste indeling heeft. Of als de onderliggende resource is geïmplementeerd in een resourcegroep die anders is dan de resourcegroep voor de bovenliggende resource.

Oplossing 1: Geïmplementeerd in dezelfde sjabloon

Als u deze fout wilt oplossen wanneer bovenliggende en onderliggende resources in dezelfde sjabloon worden geïmplementeerd, gebruikt u een afhankelijkheid.

In dit voorbeeld wordt een geneste onderliggende resource in de bovenliggende resource gebruikt en wordt de afhankelijkheid gemaakt. Het onderliggende item 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. Implementeer in plaats daarvan het onderliggende element in dezelfde resourcegroep en geef de naam van de bovenliggende resource op.

In dit voorbeeld wordt het bestaande trefwoord gebruikt om te verwijzen naar een bovenliggend item dat in een afzonderlijk bestand is geïmplementeerd. De onderliggende resource gebruikt 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
}