Dela via


Åtgärda fel för överordnade resurser

I den här artikeln beskrivs felet ParentResourceNotFound du kan få 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).

Symtom

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 måste den överordnade resursen redan finnas innan den underordnade resursen skapas. Namnet på barnresursen definierar kopplingen med den överordnade resursen. Namnet på barnresursen är i formatet <parent-resource-name>/<child-resource-name>. En 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 ParentResourceNotFound felmeddelandet.

Om den överordnade resursen redan finns och inte distribueras i samma mall får du ParentResourceNotFound-felet när Resurshanteraren 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 resursgrupp som skiljer sig frå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 inbäddad underordnad resurs inom den överordnade resursen, vilket skapar beroendet. Barnet 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 något beroende. Distribuera i stället barnresursen 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
}