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
}