Fouten oplossen voor resource niet gevonden

In dit artikel wordt de fout beschreven die wordt weergegeven wanneer een resource niet kan worden gevonden tijdens een bewerking. Deze fout wordt meestal weergegeven bij het implementeren van resources met een Bicep-bestand of een ARM-sjabloon (Azure Resource Manager). U ziet deze fout ook bij het uitvoeren van beheertaken en Azure Resource Manager de vereiste resource niet kunt vinden. Als u bijvoorbeeld tags probeert toe te voegen aan een resource die niet bestaat, wordt deze fout weergegeven.

Symptomen

Er zijn twee foutcodes die aangeven dat de resource niet kan worden gevonden. De NotFound fout retourneert een resultaat dat vergelijkbaar is met:

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

De ResourceNotFound fout retourneert een resultaat dat vergelijkbaar is met:

Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.

Oorzaak

Resource Manager moet de eigenschappen voor een resource ophalen, maar kan de resource niet vinden in uw abonnement.

Oplossing 1: Resource-eigenschappen controleren

Wanneer u deze fout ontvangt tijdens het uitvoeren van een beheertaak, controleert u de waarden die u voor de resource hebt opgegeven. De drie waarden die moeten worden gecontroleerd, zijn:

  • Resourcenaam
  • Naam van de resourcegroep
  • Abonnement

Als u PowerShell of Azure CLI gebruikt, controleert u of u opdrachten uitvoert in het abonnement dat de resource bevat. U kunt het abonnement wijzigen met Set-AzContext of az account set. Veel opdrachten bieden een abonnementsparameter waarmee u een ander abonnement kunt opgeven dan de huidige context.

Als u de eigenschappen niet kunt verifiëren, meldt u zich aan bij de Microsoft Azure Portal. Zoek de resource die u wilt gebruiken en controleer de resourcenaam, de resourcegroep en het abonnement.

Oplossing 2: Afhankelijkheden instellen

Als u deze fout krijgt bij het implementeren van een sjabloon, moet u mogelijk een afhankelijkheid toevoegen. Resource Manager optimaliseert implementaties door, indien mogelijk, parallel resources te maken.

Wanneer u bijvoorbeeld een web-app implementeert, moet het App Service-plan bestaan. Als u niet hebt opgegeven dat de web-app afhankelijk is van het App Service-abonnement, maakt Resource Manager beide resources tegelijkertijd. De web-app mislukt met een fout dat de App Service-planresource niet kan worden gevonden omdat deze nog niet bestaat. U voorkomt deze fout door een afhankelijkheid in de web-app in te stellen.

Gebruik een impliciete afhankelijkheid in plaats van de resourceId-functie . De afhankelijkheid wordt gemaakt met behulp van de symbolische naam en id-eigenschap van een resource.

De eigenschap van serverFarmId de web-app gebruikt servicePlan.id bijvoorbeeld om een afhankelijkheid van het App Service-plan te maken.

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

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

Voor de meeste implementaties is het niet nodig om een expliciete afhankelijkheid te dependsOn maken.

Vermijd het instellen van afhankelijkheden die niet nodig zijn. Onnodige afhankelijkheden verlengen de duur van de implementatie omdat resources niet parallel worden geïmplementeerd. U kunt ook circulaire afhankelijkheden maken die de implementatie blokkeren.

Implementatievolgorde

Wanneer u afhankelijkheidsproblemen ziet, moet u inzicht krijgen in de volgorde van de resource-implementatie. U kunt de portal gebruiken om de volgorde van implementatiebewerkingen weer te geven:

  1. Meld u aan bij de portal.

  2. Selecteer in het Overzicht van de resourcegroep de koppeling voor de implementatiegeschiedenis.

    Schermopname van Azure Portal met de koppeling naar de implementatiegeschiedenis van een resourcegroep gemarkeerd in de sectie Overzicht.

  3. Selecteer Gerelateerde gebeurtenissen voor de implementatienaam die u wilt controleren.

    Schermopname van Azure Portal met een implementatienaam met de koppeling Gerelateerde gebeurtenissen gemarkeerd in de implementatiegeschiedenis.

  4. Bekijk de volgorde van gebeurtenissen voor elke resource. Let op de status van elke bewerking en het tijdstempel. In de volgende afbeelding ziet u bijvoorbeeld drie opslagaccounts die parallel zijn geïmplementeerd. U ziet dat de drie implementaties van het opslagaccount tegelijkertijd zijn gestart.

    Schermopname van Azure Portal activiteitenlogboek met drie opslagaccounts die parallel zijn geïmplementeerd, met hun tijdstempels en statussen.

    In de volgende afbeelding ziet u drie opslagaccounts die niet parallel zijn geïmplementeerd. Het tweede opslagaccount is afhankelijk van het eerste opslagaccount en het derde opslagaccount is afhankelijk van het tweede opslagaccount. Het eerste opslagaccount heeft het label Gestart, Geaccepteerd en Geslaagd voordat het volgende wordt gestart.

    Schermopname van Azure Portal activiteitenlogboek met drie opslagaccounts die in opeenvolgende volgorde zijn geïmplementeerd, met hun tijdstempels en statussen.

Oplossing 3: Externe resource ophalen

Bicep gebruikt de symbolische naam om een impliciete afhankelijkheid van een andere resource te maken. Het bestaande trefwoord verwijst naar een geïmplementeerde resource. Als een bestaande resource zich in een andere resourcegroep bevindt dan de resource die u wilt implementeren, neemt u het bereik op en gebruikt u de functie resourceGroup .

In dit voorbeeld wordt een web-app geïmplementeerd die gebruikmaakt van een bestaand App Service-plan uit een andere resourcegroep.

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
  }
}

Oplossing 4: Beheerde identiteit ophalen uit resource

Als u een resource met een beheerde identiteit implementeert, moet u wachten tot die resource is geïmplementeerd voordat u waarden op de beheerde identiteit opzoekt. Gebruik een impliciete afhankelijkheid voor de resource waarop de identiteit wordt toegepast. Deze aanpak zorgt ervoor dat de resource en de beheerde identiteit worden geïmplementeerd voordat Resource Manager de afhankelijkheid gebruikt.

U kunt de principal-id en tenant-id ophalen voor een beheerde identiteit die wordt toegepast op een virtuele machine. Als een virtuele-machineresource bijvoorbeeld de symbolische naam heeft, vmgebruikt u de volgende syntaxis:

vm.identity.principalId

vm.identity.tenantId

Oplossing 5: Functies controleren

U kunt de symbolische naam van een resource gebruiken om waarden op te halen uit een resource. U kunt verwijzen naar een opslagaccount in dezelfde resourcegroep of een andere resourcegroep met behulp van een symbolische naam. Gebruik het bestaande trefwoord om een waarde op te halen uit een geïmplementeerde resource. Als een resource zich in een andere resourcegroep bevindt, gebruikt scope u met de functie resourceGroup . In de meeste gevallen is de referentiefunctie niet nodig.

Het volgende voorbeeld verwijst naar een bestaand opslagaccount in een andere resourcegroep.

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

Oplossing 6: Na het verwijderen van de resource

Wanneer u een resource verwijdert, kan het even duren wanneer de resource wordt weergegeven in de portal, maar niet beschikbaar is. Als u de resource selecteert, krijgt u een foutmelding dat de resource Niet gevonden is.

Schermopname van Azure Portal met een verwijderde resource met het foutbericht 'Niet gevonden' in de sectie Overzicht van de resource.

Vernieuw de portal en de verwijderde resource moet worden verwijderd uit de lijst met beschikbare resources. Als een verwijderde resource langer dan een paar minuten als beschikbaar wordt weergegeven, neemt u contact op met de ondersteuning.