Lösa fel för överordnade resurser

I den här artikeln beskrivs det ParentResourceNotFound fel som kan uppstå när du distribuerar en resurs som är beroende av en överordnad resurs. Felet uppstår när du distribuerar resurser med en Bicep-fil eller Azure Resource Manager-mall (ARM-mall).

Symptom

När du distribuerar en resurs som är underordnad till en annan resurs kan du få följande fel:

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

Orsak

När en resurs är underordnad en annan resurs måste den överordnade resursen finnas innan den underordnade resursen skapas. Namnet på den underordnade resursen definierar anslutningen till den överordnade resursen. Namnet på den underordnade resursen har formatet <parent-resource-name>/<child-resource-name>. Ett SQL Database kan till exempel definieras som:

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

Mer information om överordnade och underordnade Bicep-resurser finns i Ange namn och typ för underordnade resurser i Bicep.

Om du distribuerar servern och databasen i samma mall, men inte anger något beroende på servern, kan databasdistributionen starta innan servern har distribuerats. Det gör att databasdistributionen misslyckas med felet ParentResourceNotFound .

Om den överordnade resursen redan finns och inte distribueras i samma mall får ParentResourceNotFound du felet när Resource Manager inte kan associera den underordnade resursen med en överordnad resurs. Det här felet kan inträffa när den underordnade resursen inte har rätt format. Eller om den underordnade resursen distribueras till en annan resursgrupp än resursgruppen för den överordnade resursen.

Lösning 1: Distribuerad i samma mall

Om du vill lösa det här felet när överordnade och underordnade resurser distribueras i samma mall använder du ett beroende.

I det här exemplet används en kapslad underordnad resurs i den överordnade resursen och som skapar beroendet. Underordnad hämtar resurstypen och API-versionen från den överordnade resursen.

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

Mer information om beroenden finns i Resursdeklaration i Bicep.

Lösning 2: Distribuerad i olika mallar

Du kan lösa det här felet när den överordnade resursen distribuerades i en annan mall genom att inte ange ett beroende. Distribuera i stället det underordnade objektet till samma resursgrupp och ange namnet på den överordnade resursen.

I det här exemplet används det befintliga nyckelordet för att referera till en överordnad som har distribuerats i en separat fil. Den underordnade resursen använder elementet parent och den överordnade resursens symboliska namn.

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
}