Condividi tramite


Risolvere gli errori relativi alla risorsa non trovata

Questo articolo descrive l'errore visualizzato quando non è possibile trovare una risorsa durante un'operazione. In genere, questo errore viene visualizzato durante la distribuzione delle risorse con un file Bicep o un modello di Azure Resource Manager (modello arm). Questo errore viene visualizzato anche quando si eseguono attività di gestione e Azure Resource Manager non riesce a trovare la risorsa necessaria. Ad esempio, se si tenta di aggiungere tag a una risorsa che non esiste, viene visualizzato questo errore.

Sintomi

Esistono due codici di errore che indicano che la risorsa non è stata trovata. L'errore NotFound restituisce un risultato simile al seguente:

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

L'errore ResourceNotFound 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.

Motivo

Resource Manager deve recuperare le proprietà per una risorsa, ma non riesce a trovare la risorsa nella tua sottoscrizione.

Soluzione 1: Controllare le proprietà delle risorse

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

  • Nome risorsa
  • Nome del gruppo di risorse
  • Abbonamento

Se si utilizza PowerShell o CLI di Azure, assicurarsi di eseguire i comandi nella sottoscrizione che contiene la risorsa. È possibile modificare la sottoscrizione 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 di Microsoft Azure. Trovare la risorsa che si sta provando a 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 di servizio app, Resource Manager crea entrambe le risorse contemporaneamente. L'app Web ha esito negativo e viene visualizzato un errore che indica che la risorsa del piano di servizio app non è ancora stata trovata perché non esiste ancora. Per evitare questo errore, impostare una dipendenza nell'app Web.

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

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

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

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

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

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

Ordine di distribuzione

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

  1. Accedere al portale.

  2. Nella panoramica del gruppo di risorse selezionare il collegamento per la cronologia di distribuzione.

    Screenshot del portale di Azure che evidenzia il collegamento alla cronologia di distribuzione di un gruppo di risorse nella sezione Panoramica.

  3. Per rivedere il nome distribuzione, seleziona Eventi correlati.

    Screenshot del portale di Azure che mostra un nome di distribuzione con il collegamento Eventi correlati evidenziato nella cronologia di distribuzione.

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

    Screenshot del log attività del portale di Azure in cui si vedono tre account di archiviazione distribuiti in parallelo, con le loro marcature temporali e gli stati.

    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 viene etichettato Started, Accepted e Succeeded prima dell'avvio successivo.

    Screenshot del log attività del portale di Azure che mostra tre account di archiviazione distribuiti in ordine sequenziale, con i timestamp e gli stati.

Soluzione 3: Ottenere una risorsa esterna

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 rispetto alla risorsa 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 da un altro gruppo di risorse.

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

Soluzione 4: Ottenere l'identità gestita dalla risorsa

Se si distribuisce una risorsa con un'identità gestita, è necessario attendere che tale risorsa venga distribuita prima di recuperare i valori nell'identità gestita. Usare una dipendenza implicita per la risorsa a cui viene applicata l'identità. Questo approccio garantisce che la risorsa e l'identità gestita vengano distribuite prima che Resource Manager usi la dipendenza.

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

vm.identity.principalId

vm.identity.tenantId

Soluzione 5: Controllare le funzioni

È 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 funzione resourceGroup . Per la 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@2022-05-01' existing = {
  name: stgname
  scope: resourceGroup(rgname)
}

Soluzione 6: Dopo l'eliminazione della risorsa

Quando si elimina una risorsa, potrebbe verificarsi un breve periodo di tempo in cui la risorsa viene visualizzata nel portale, ma non è disponibile. Se si seleziona la risorsa, verrà visualizzato un errore che indica che la risorsa non viene trovata.

Screenshot del portale di Azure che mostra una risorsa eliminata con un messaggio di errore

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