Risolvere gli errori di risorse non trovate

Questo articolo descrive l'errore visualizzato quando non è possibile trovare una risorsa durante un'operazione. In genere, questo errore viene visualizzato quando si distribuiscono risorse con un file Bicipite o un modello di Azure Resource Manager (ARM modello). Questo errore viene visualizzato anche quando si eservino attività di gestione e Azure Resource Manager non trova la risorsa richiesta. Ad esempio, se si prova ad aggiungere tag a una risorsa che non esiste, viene visualizzato questo errore.

Sintomo

Esistono due codici di errore che indicano che non è possibile trovare la risorsa. NotFoundL'errore restituisce un risultato simile al seguente:

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

ResourceNotFoundL'errore restituisce un risultato simile al seguente:

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

Causa

Resource Manager deve recuperare le proprietà di una risorsa, ma non può trovare la risorsa nella sottoscrizione.

Soluzione 1 - controllare le proprietà delle risorse

Quando si riceve questo errore durante l'esecuzione di un'attività di gestione, controllare i valori forniti per la risorsa. I tre valori da controllare sono:

  • Nome risorsa
  • Nome del gruppo di risorse
  • Abbonamento

Se si usa PowerShell o l'interfaccia della riga di comando di Azure, verificare di eseguire i comandi nella sottoscrizione che contiene la risorsa. È possibile modificare l'abbonamento con Set-AzContext o az account set. Molti comandi forniscono un parametro di sottoscrizione che consente di specificare una sottoscrizione diversa rispetto al contesto corrente.

Se non è possibile verificare le proprietà, accedere al portale Microsoft Azure. Trovare la risorsa che si sta cercando di usare ed esaminare il nome della risorsa, il gruppo di risorse e la sottoscrizione.

Soluzione 2 - impostare le dipendenze

Se viene visualizzato questo errore durante la distribuzione di un modello, potrebbe essere necessario aggiungere una dipendenza. Resource Manager ottimizza le distribuzioni creando risorse in parallelo, quando possibile.

Ad esempio, quando si distribuisce un'app Web, il piano di servizio app deve esistere. Se non è stato specificato che l'app Web dipende dal piano del servizio app, Gestione risorse crea entrambe le risorse contemporaneamente. L'app Web non riesce con un errore che indica che non è possibile trovare la risorsa del piano di servizio app perché non esiste ancora. Per evitare questo errore, impostare una dipendenza nell'app Web.

Usare una dipendenza implicita invece della funzione resourceId. La dipendenza viene creata usando il nome simbolico e la proprietà ID di una risorsa.

Ad esempio, la proprietà dell'app Web usa serverFarmId per creare una dipendenza dal piano di servizio servicePlan.id app.

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

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

Per la maggior parte delle distribuzioni, non è necessario usare dependsOn per creare una dipendenza dependsOn

Evitare di impostare dipendenze non necessarie. Le dipendenze non necessarie prolungano la durata della distribuzione perché le risorse non vengono distribuite in parallelo. Inoltre, è possibile creare dipendenze circolari che bloccano la distribuzione.

Ordine di distribuzione

Quando si verificano problemi di dipendenza, è necessario ottenere informazioni approfondite sull'ordine di distribuzione delle risorse. È possibile usare il portale per visualizzare l'ordine delle operazioni di distribuzione:

  1. Accedere al portale.

  2. In Panoramica del gruppo di risorse selezionareil collegamento per la cronologia della distribuzione.

    Screenshot that highlights the link to a resource group's deployment history.

  3. Per il nome della distribuzione da rivedere, selezionare Eventi correlati.

    Screenshot that highlights the link to a deployment's related events.

  4. Esaminare la sequenza di eventi per ogni risorsa. Prestare attenzione allo stato di ogni operazione e al timestamp. Ad esempio, l'immagine seguente mostra tre account di archiviazione distribuiti in parallelo. Si noti che i tre account di archiviazione vengono avviati contemporaneamente.

    Screenshot of activity log for resources deployed in parallel.

    L'immagine successiva mostra tre account di archiviazione non distribuiti in parallelo. Il secondo account di archiviazione dipende dal primo account di archiviazione e il terzo account di archiviazione dipende dal secondo account di archiviazione. Il primo account di archiviazione è contrassegnato come Avviato,Accettatoe Completato prima dell'avvio del successivo.

    Screenshot of activity log for resources deployed in sequential order.

Soluzione 3 - ottenere risorse esterne

Bicep usa il nome simbolico per creare una dipendenza implicita da un'altra risorsa. La parola chiave esistente fa riferimento a una risorsa distribuita. Se una risorsa esistente si trova in un gruppo di risorse diverso da quella da distribuire, includere l'ambito e usare la funzione resourceGroup.

In questo esempio viene distribuita un'app Web che usa un piano di servizio app esistente di un altro gruppo di risorse.

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

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

Soluzione 4 : ottenere l'identità gestita dalla risorsa

Se si distribuisce una risorsa con un'identità gestita,è necessario attendere la distribuzione della risorsa prima di recuperare i valori nell'identità gestita. Usare una dipendenza implicita per la risorsa a cui è applicata l'identità. Questo approccio assicura che la risorsa e l'identità gestita siano distribuite prima che Gestione risorse usi la dipendenza.

È possibile ottenere l'ID entità e l'ID tenant per un'identità gestita applicata a una macchina virtuale. Ad esempio, se una risorsa della macchina virtuale ha un nome simbolico vm , usare la sintassi seguente:

vm.identity.principalId

vm.identity.tenantId

Soluzione 5 - funzioni di controllo

È possibile usare il nome simbolico di una risorsa per ottenere valori da una risorsa. È possibile fare riferimento a un account di archiviazione nello stesso gruppo di risorse o in un altro gruppo di risorse usando un nome simbolico. Per ottenere un valore da una risorsa distribuita, usare la parola chiave esistente. Se una risorsa si trova in un gruppo di risorse diverso, usare scope con la scope Nella maggior parte dei casi, la funzione di riferimento non è necessaria.

L'esempio seguente fa riferimento a un account di archiviazione esistente in un gruppo di risorse diverso.

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

Soluzione 6 - dopo l'eliminazione della risorsa

Quando si elimina una risorsa, potrebbe essere necessario un breve periodo di tempo quando la risorsa viene visualizzata nel portale ma non è disponibile. Se si seleziona la risorsa, viene visualizzato un messaggio di errore che indica che la risorsa non è stata trovata.

Screenshot of deleted resource in portal that shows resource not found.

Aggiornare il portale e la risorsa eliminata deve essere rimossa dall'elenco delle risorse disponibili. Se una risorsa eliminata continua a essere visualizzata come disponibile per più di pochi minuti, contattare il supportotecnico.