Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt de fout beschreven die wordt weergegeven wanneer een resource niet kan worden gevonden tijdens een bewerking. Normaal gesproken ziet u deze fout bij het implementeren van resources met een Bicep-bestand of azure Resource Manager-sjabloon (ARM-sjabloon). U ziet deze fout ook bij het uitvoeren van beheertaken en Azure Resource Manager kan de vereiste resource niet vinden. Als u bijvoorbeeld tags probeert toe te voegen aan een resource die niet bestaat, ontvangt u deze fout.
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 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 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 resources parallel te maken, indien mogelijk.
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-plan, maakt Resource Manager beide resources tegelijk. De web-app geeft een foutmelding dat de resource van het App Service-plan niet kan worden gevonden omdat deze nog niet bestaat. U voorkomt deze fout door een afhankelijkheid in te stellen in de web-app.
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.
Bijvoorbeeld, de eigenschap van de web-app serverFarmId
gebruikt servicePlan.id
om een afhankelijkheid van het App Service-plan te creëren.
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 dependsOn
om een expliciete afhankelijkheid te 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:
Meld u aan bij de portal.
Selecteer in het overzicht van de resourcegroep de koppeling voor de implementatiegeschiedenis.
Selecteer Verwante gebeurtenissen voor de implementatienaam die u wilt controleren.
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.
In de volgende afbeelding ziet u drie opslagaccounts die niet parallel worden 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 de volgende wordt gestart.
Oplossing 3: Externe bron 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 benadering 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 een symbolische naam vm
heeft, gebruikt 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 u de scope
-functie samen met . In de meeste gevallen is de referentiefunctie niet nodig.
In het volgende voorbeeld wordt verwezen 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 voordat de resource in de portal wordt weergegeven, maar niet beschikbaar is. Als u de resource selecteert, krijgt u een foutmelding dat de resource niet is gevonden.
Vernieuw de portal en de verwijderde resource moet worden verwijderd uit uw lijst met beschikbare resources. Als een verwijderde resource langer dan een paar minuten beschikbaar blijft, neemt u contact op met de ondersteuning.