Řešení chyb u nadřazených prostředků

Tento článek popisuje ParentResourceNotFound chybu, ke které může dojít při nasazování prostředku, který je závislý na nadřazených prostředcích. K této chybě dojde při nasazení prostředků pomocí souboru Bicep nebo šablony Azure Resource Manager (šablona ARM).

Příznak

Když nasadíte prostředek, který je podřízený, do jiného prostředku, může se zobrazit následující chyba:

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

Příčina

Pokud je jeden prostředek podřízený jinému prostředku, musí nadřazený prostředek existovat před vytvořením podřízeného prostředku. Název podřízeného prostředku definuje připojení k nadřazeným prostředkům. Název podřízeného prostředku je ve formátu <parent-resource-name>/<child-resource-name>. Například SQL Database může být definován jako:

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

Další informace o nadřazených a podřízených prostředcích Bicep najdete v tématu Nastavení názvu a typu pro podřízené prostředky v nástroji Bicep.

Pokud nasadíte server a databázi ve stejné šabloně, ale nezadáte závislost na serveru, může se nasazení databáze spustit před nasazením serveru. To způsobí selhání nasazení databáze s chybou ParentResourceNotFound .

Pokud nadřazený prostředek už existuje a není nasazený ve stejné šabloně, zobrazí se ParentResourceNotFound chyba, když Resource Manager nemůže přidružit podřízený prostředek k nadřazené sadě. K této chybě může dojít, když podřízený prostředek nemá správný formát. Nebo pokud je podřízený prostředek nasazený do skupiny prostředků, která se liší od skupiny prostředků pro nadřazený prostředek.

Řešení 1: Nasazeno ve stejné šabloně

Pokud chcete tuto chybu vyřešit, když jsou ve stejné šabloně nasazené nadřazené a podřízené prostředky, použijte závislost.

V tomto příkladu se používá vnořený podřízený prostředek v rámci nadřazeného prostředku, který vytvoří závislost. Podřízený objekt získá typ prostředku a verzi rozhraní API z nadřazeného prostředku.

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

Další informace o závislostech najdete v tématu Deklarace prostředků v bicepu.

Řešení 2: Nasazení v různých šablonách

Pokud chcete tuto chybu vyřešit, když byl nadřazený prostředek nasazený v jiné šabloně, nenastavujte závislost. Místo toho nasaďte podřízenou položku do stejné skupiny prostředků a zadejte název nadřazeného prostředku.

Tento příklad používá existující klíčové slovo k odkazu na nadřazený objekt, který byl nasazen v samostatném souboru. Podřízený prostředek používá parent element a symbolický název nadřazeného prostředku.

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
}