Beheben von Fehlern des Typs „Ressource nicht gefunden“

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:

Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.

Der ResourceNotFound-Fehler gibt ein Ergebnis ähnlich dem folgenden zurück:

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.

Verwenden Sie eine implizite Abhängigkeit anstelle der resourceId-Funktion. Die Abhängigkeit wird unter Verwendung des symbolischen Namens und der ID-Eigenschaft einer Ressource erstellt.

Beispielsweise verwendet die serverFarmId-Eigenschaft der Web-App, um eine Abhängigkeit vom App Service-Plan zu erstellen, servicePlan.id.

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  properties: {
    serverFarmId: servicePlan.id
  }
}

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  ...

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.

Bereitstellungsreihenfolge

Wenn Abhängigkeitsprobleme auftreten, benötigen Sie Informationen zur Reihenfolge der Ressourcenbereitstellung. Im Portal können Sie die Reihenfolge der Bereitstellungsvorgänge anzeigen:

  1. Melden Sie sich beim Portal an.

  2. Wählen Sie in der Übersicht der Ressourcengruppe den Link für den Bereitstellungsverlauf aus.

    Screenshot, der den Link zum Bereitstellungsverlauf einer Ressourcengruppe hervorhebt.

  3. Wählen Sie als Bereitstellungsnamen, den Sie überprüfen möchten, Verknüpfte Ereignisse aus.

    Screenshot, der den Link zu verknüpften Ereignissen einer Bereitstellung hervorhebt.

  4. Ü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.

    Screenshot des Aktivitätsprotokolls für gleichzeitig bereitgestellte Ressourcen.

    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.

    Screenshot des Aktivitätsprotokolls für nacheinander bereitgestellte Ressourcen.

Lösung 3: Abrufen einer externen Ressource

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.

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' existing = {
  name: hostingPlanName
  scope: resourceGroup(rgname)
}

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  name: siteName
  properties: {
    serverFarmId: servicePlan.id
  }
}

Lösung 4: Abrufen der verwalteten Identität aus der Ressource

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:

vm.identity.principalId

vm.identity.tenantId

Lösung 5: Überprüfen von Funktionen

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.

resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
  name: stgname
  scope: resourceGroup(rgname)
}

Lösung 6: Nach dem Löschen der Ressource

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.

Screenshot einer gelöschten Ressource im Portal, der „Ressource nicht gefunden“ zeigt.

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.