Beheben von Fehlern des Typs „Ressource nicht gefunden“
Artikel
In diesem Artikel wird der angezeigte Fehler beschrieben, wenn eine Ressource während eines Vorgangs nicht gefunden wird. In der Regel tritt dieser Fehler auf, wenn Sie Ressourcen mit einer Bicep-Datei oder einer Azure Resource Manager-Vorlage (ARM-Vorlage) bereitstellen. Dieser Fehler wird auch angezeigt, wenn Sie Verwaltungsaufgaben ausführen und Azure Resource Manager die erforderliche Ressource nicht finden kann. Wenn Sie z. B. versuchen, Tags zu einer Ressource hinzuzufügen, die nicht vorhanden ist, wird dieser Fehler angezeigt.
Symptome
Es gibt zwei Fehlercodes, die anzeigen, dass die Ressource nicht gefunden wurde. Der NotFound-Fehler gibt ein Ergebnis ähnlich dem folgenden zurück:
Output
Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.
Der ResourceNotFound-Fehler gibt ein Ergebnis ähnlich dem folgenden zurück:
Output
Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.
Ursache
Resource Manager muss die Eigenschaften für eine Ressource abrufen, kann die Ressource aber in Ihrem Abonnement nicht finden.
Lösung 1: Überprüfen der Ressourceneigenschaften
Wenn dieser Fehler beim Ausführen einer Verwaltungsaufgabe auftritt, überprüfen Sie die Werte, die Sie für die Ressource angegeben haben. Die drei zu überprüfenden Werte sind:
Ressourcenname
Ressourcengruppenname
Subscription
Wenn Sie PowerShell oder Azure CLI verwenden, überprüfen Sie, ob Sie Befehle in dem Abonnement ausführen, das die Ressource enthält. Sie können das Abonnement mit Set-AzContext- oder az account set ändern. Viele Befehle bieten auch einen Abonnementparameter, mit dem Sie ein anderes Abonnement als den aktuellen Kontext angeben können.
Wenn Sie die Eigenschaften nicht überprüfen können, melden Sie sich beim Microsoft Azure-Portal an. Suchen Sie die Ressource, die Sie verwenden möchten, und untersuchen Sie den Ressourcennamen, die Ressourcengruppe und das Abonnement.
Lösung 2: Festlegen von Abhängigkeiten
Wenn dieser Fehler beim Bereitstellen einer Vorlage auftritt, müssen Sie möglicherweise eine Abhängigkeit hinzufügen. Resource Manager optimiert die Bereitstellung, indem, sofern möglich, gleichzeitig Ressourcen erstellt werden.
Beim Bereitstellen einer Web-App muss z. B. der App Service-Plan vorhanden sein. Wenn Sie nicht angegeben haben, dass die Web-App vom App Service-Plan abhängig ist, erstellt Resource Manager beide Ressourcen zur gleichen Zeit. Bei der Web-App tritt ein Fehler auf, weil die App Service-Planressource nicht gefunden werden kann, da sie noch nicht vorhanden ist. Sie verhindern diesen Fehler, indem Sie eine Abhängigkeit in der Web-App festlegen.
Bei den meisten Bereitstellungen ist es nicht erforderlich, dependsOn zu verwenden, um eine explizite Abhängigkeit zu erstellen.
Vermeiden Sie es, Abhängigkeiten einzurichten, die nicht benötigt werden. Unnötige Abhängigkeiten verlängern die Dauer der Bereitstellung, da Ressourcen nicht parallel bereitgestellt werden. Außerdem könnten Sie Ringabhängigkeiten erstellen, die die Bereitstellung blockieren.
Wenn eine Ressource nach einer anderen Ressource bereitgestellt werden muss, verwenden Sie das dependsOn-Element in der Vorlage.
Vermeiden Sie es, Abhängigkeiten einzurichten, die nicht benötigt werden. Unnötige Abhängigkeiten verlängern die Dauer der Bereitstellung, da Ressourcen nicht parallel bereitgestellt werden. Außerdem könnten Sie Ringabhängigkeiten erstellen, die die Bereitstellung blockieren.
Die Funktionen reference und list* erstellen eine implizite Abhängigkeit von der angegebenen Ressource, wenn diese Ressource in derselben Vorlage bereitgestellt und mit ihrem eigenen Namen (nicht ihrer Ressourcen-ID) auf sie verwiesen wird. Aus diesem Grund verfügen Sie ggf. über eine höhere Zahl von Abhängigkeiten als in der dependsOn-Eigenschaft angegeben.
Die Funktion resourceId erstellt keine implizite Abhängigkeit und überprüft nicht, ob die Ressource vorhanden ist. Die Funktion reference und die list*-Funktionen erstellen keine implizite Abhängigkeit, wenn mit der Ressourcen-ID auf die Ressource verwiesen wird. Um eine implizite Abhängigkeit zu erstellen, übergeben Sie den Namen der Ressource, die in derselben Vorlage bereitgestellt wird.
Bereitstellungsreihenfolge
Wenn Abhängigkeitsprobleme auftreten, benötigen Sie Informationen zur Reihenfolge der Ressourcenbereitstellung. Im Portal können Sie die Reihenfolge der Bereitstellungsvorgänge anzeigen:
Wählen Sie in der Übersicht der Ressourcengruppe den Link für den Bereitstellungsverlauf aus.
Wählen Sie als Bereitstellungsnamen, den Sie überprüfen möchten, Verknüpfte Ereignisse aus.
Überprüfen Sie die Abfolge von Ereignissen für jede Ressource. Achten Sie auf den Status jedes Vorgangs und seinen Zeitstempel. Die folgende Abbildung zeigt beispielsweise drei parallel bereitgestellte Speicherkonten. Beachten Sie, dass die drei Speicherkontobereitstellungen zur selben Zeit gestartet werden.
Die nächste Abbildung zeigt drei Speicherkonten, die nicht parallel bereitgestellt werden. Das zweite Speicherkonto ist vom ersten Speicherkonto abhängig, und das dritte Speicherkonto ist vom zweiten Speicherkonto abhängig. Das erste Speicherkonto wird mit Gestartet, Akzeptiert und Erfolgreich bezeichnet, bevor das nächste gestartet wird.
Bicep verwendet den symbolischen Namen, um eine implizite Abhängigkeit von einer anderen Ressource zu erstellen. Das existing-Schlüsselwort (vorhanden) verweist auf eine bereitgestellte Ressource. Wenn sich eine vorhandene Ressource in einer anderen Ressourcengruppe als die Ressource befindet, die Sie bereitstellen möchten, schließen Sie den Bereich ein, und verwenden Sie die resourceGroup-Funktion.
In diesem Beispiel wird eine Web-App bereitgestellt, die einen vorhandenen App Service-Plan aus einer anderen Ressourcengruppe verwendet.
Wenn Sie eine Vorlage bereitstellen und eine Ressource abrufen müssen, die in einem anderen Abonnement oder in einer anderen Ressourcengruppe vorhanden ist, verwenden Sie die resourceId-Funktion. Diese Funktion gibt den vollqualifizierten Namen der Ressource zurück.
Die Abonnement- und Ressourcengruppenparameter in der resourceId-Funktion sind optional. Wenn Sie diese nicht angeben, werden Sie standardmäßig auf das aktuelle Abonnement und die aktuelle Ressourcengruppe festgelegt. Stellen Sie beim Arbeiten mit einer Ressource in einer anderen Ressourcengruppe oder einem anderen Abonnement sicher, dass Sie diese Werte angeben.
Im folgenden Beispiel wird die Ressourcen-ID für eine Ressource abgerufen, die in einer anderen Ressourcengruppe vorhanden ist.
Wenn Sie eine Ressource mit einer verwalteten Identität bereitstellen, müssen Sie warten, bis diese Ressource bereitgestellt wurde, bevor Sie Werte für die verwaltete Identität abrufen können. Verwenden Sie eine implizite Abhängigkeit für die Ressource, auf die die Identität angewendet wird. Mit diesem Ansatz wird sichergestellt, dass die Ressource und die verwaltete Identität bereitgestellt werden, bevor Resource Manager die Abhängigkeit verwendet.
Sie können die Prinzipal-ID und Mandanten-ID für eine verwaltete Identität abrufen, die auf einen virtuellen Computer angewandt wird. Wenn eine Ressource eines virtuellen Computers beispielsweise den symbolischen Namen vm hat, verwenden Sie die folgende Syntax:
Bicep
vm.identity.principalIdvm.identity.tenantId
Wenn Sie eine Ressource mit einer verwalteten Identität bereitstellen, müssen Sie warten, bis diese Ressource bereitgestellt wurde, bevor Sie Werte für die verwaltete Identität abrufen können. Wenn Sie den Namen der verwalteten Identität an die Verweisfunktion (reference) übergeben, versucht Resource Manager, den Verweis aufzulösen, bevor die Ressource und die Identität bereitgestellt sind. Übergeben Sie stattdessen den Namen der Ressource, auf die die Identität angewendet wird. Mit diesem Ansatz wird sichergestellt, dass die Ressource und die verwaltete Identität bereitgestellt sind, bevor Resource Manager die Verweisfunktion auflöst.
Verwenden Sie in der Verweisfunktion Full, um alle Eigenschaften, einschließlich der verwalteten Identität, abzurufen.
Sie können den symbolischen Namen einer Ressource verwenden, um Werte von einer Ressource abzurufen. Sie können in derselben Ressourcengruppe oder einer anderen Ressourcengruppe auf ein Speicherkonto verweisen, indem Sie einen symbolischen Namen verwenden. Um einen Wert von einer bereitgestellten Ressource abzurufen, verwenden Sie das existing-Schlüsselwort (vorhanden). Befindet sich eine Ressource in einer anderen Ressourcengruppe, verwenden Sie scope mit der resourceGroup-Funktion. In den meisten Fällen wird die reference-Funktion (Verweis) nicht benötigt.
Im folgenden Beispiel wird auf ein vorhandenes Speicherkonto in einer anderen Ressourcengruppe verwiesen.
Wenn Sie eine Vorlage bereitstellen, suchen Sie nach Ausdrücken, die die reference- oder listKeys-Funktion verwenden. Die von Ihnen bereitgestellten Werte variieren basierend darauf, ob sich die Ressource in der gleichen Vorlage und Ressourcengruppe und im gleichen Abonnement befindet. Vergewissern Sie sich, dass die erforderlichen Parameterwerte für Ihr Szenario angegeben wurden. Befindet sich die Ressource in einer anderen Ressourcengruppe, geben Sie die vollständige Ressourcen-ID an. Verwenden Sie zum Verweisen auf ein Speicherkonto in einer anderen Ressourcengruppe beispielsweise Folgendes:
Wenn Sie eine Ressource löschen, wird die Ressource möglicherweise für kurze Zeit weiterhin im Portal angezeigt, ist aber nicht verfügbar. Wenn Sie die Ressource auswählen, informiert Sie eine Fehlermeldung darüber, dass die Ressource nicht gefunden wurde.
Aktualisieren Sie das Portal, und die gelöschte Ressource sollte aus Ihrer Liste der verfügbaren Ressourcen entfernt werden. Wenn eine gelöschte Ressource länger als ein paar Minuten noch als verfügbar angezeigt wird, wenden Sie sich an den Support.
Obtenga información sobre cómo implementar recursos secundarios y de extensión, y hacer referencia a los recursos existentes, dentro del código de Bicep.
Obtenga información sobre los inquilinos, los usuarios y las suscripciones de Azure. Use la CLI de Azure para administrar las suscripciones, crear grupos de administración y bloquear suscripciones.
Solución de errores comunes de implementación de Azure para recursos que se implementan con archivos Bicep o plantillas de Azure Resource Manager (plantillas ARM).
Comprenda qué proveedores de recursos admiten Azure Resource Manager y sus esquemas, versiones de API disponibles y las regiones que pueden hospedar los recursos.
Describe cómo resolver errores al implementar un recurso que depende de un recurso primario en un archivo Bicep o en una plantilla de Azure Resource Manager (plantilla de ARM).