Beheben von Fehlern bei übergeordneten Ressourcen

In diesem Artikel wird der Fehler ParentResourceNotFound beschrieben, der bei der Bereitstellung einer Ressource auftreten kann, die von einer übergeordneten Ressource abhängig ist. Der Fehler tritt auf, wenn Sie Ressourcen mit einer Bicep-Datei oder einer Azure Resource Manager-Vorlage (ARM-Vorlage) bereitstellen.

Symptom

Wenn Sie eine Ressource bereitstellen, die einer anderen Ressource untergeordnet ist, kann der folgende Fehler auftreten:

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

Ursache

Wenn eine Ressource einer anderen untergeordnet ist, muss die übergeordnete Ressource vor dem Erstellen der untergeordneten Ressource bereits vorhanden sein. Der Name der untergeordneten Ressource definiert die Verbindung mit der übergeordneten Ressource. Der Name der untergeordneten Ressource weist das Format <parent-resource-name>/<child-resource-name> auf. Zum Beispiel könnte eine SQL-Datenbank wie folgt definiert werden:

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

Weitere Informationen zu über- und untergeordneten Bicep-Ressourcen finden Sie unter Festlegen von Name und Typ für untergeordnete Ressourcen in Bicep.

Wenn Sie Server und Datenbank in der gleichen Vorlage bereitstellen, jedoch auf dem Server keine Abhängigkeit angeben, beginnt die Datenbankbereitstellung möglicherweise vor Bereitstellung des Servers. Dies führt dazu, dass die Datenbankbereitstellung mit dem Fehler ParentResourceNotFound fehlschlägt.

Falls die übergeordnete Ressource bereits vorhanden ist und nicht in der gleichen Vorlage bereitgestellt wird, erhalten Sie den Fehler ParentResourceNotFound, wenn Resource Manager die untergeordnete Ressource nicht mit der übergeordneten Ressource verknüpfen kann. Dieser Fehler kann auftreten, wenn die untergeordnete Ressource nicht das richtige Format hat. Oder wenn die untergeordnete Ressource in einer Ressourcengruppe bereitgestellt wird, die sich von der Ressourcengruppe der übergeordneten Ressource unterscheidet.

Lösung 1: Bereitstellung in derselben Vorlage

Nehmen Sie eine Abhängigkeit auf, um diesen Fehler zu beheben, wenn die übergeordnete und untergeordnete Ressource in der gleichen Vorlage bereitgestellt werden.

In diesem Beispiel wird eine geschachtelte untergeordnete Ressource innerhalb der übergeordneten Ressource verwendet, die die Abhängigkeit erstellt. Das untergeordnete Element ruft Ressourcentyp und API-Version der übergeordneten Ressource ab.

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

Weitere Informationen zu Abhängigkeiten finden Sie unter Ressourcendeklaration in Bicep.

Lösung 2: Bereitstellung in verschiedenen Vorlagen

Um diesen Fehler zu beheben, wenn die übergeordnete Ressource in einer anderen Vorlage bereitgestellt wurde, legen Sie keine Abhängigkeiten fest. Stellen Sie stattdessen die untergeordnete Ressource in der gleichen Ressourcengruppe bereit, und geben Sie den Namen der übergeordneten Ressource an.

In diesem Beispiel wird das Schlüsselwort existing verwendet, um auf ein übergeordnetes Element zu verweisen, das in einer separaten Datei bereitgestellt wurde. Die untergeordnete Ressource verwendet das Element parent und den symbolischen Namen der übergeordneten Ressource.

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
}