Condividi tramite


Risolvere gli errori per "Risorsa non trovata"

Questo articolo descrive l'errore che viene visualizzato quando non si trova una risorsa durante un'operazione. Solitamente, questo errore viene visualizzato durante la distribuzione delle risorse con un file Bicep o un modello di Azure Resource Manager (modello di ARM). Inoltre, questo errore viene visualizzato quando si eseguono attività di gestione e Azure Resource Manager non trova la risorsa richiesta. Ad esempio, questo errore viene visualizzato se si tenta di aggiungere tag a una risorsa inesistente.

Sintomi

In caso di risorsa non trovata, vengono visualizzati due codici di errore. 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.

Causa

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

Soluzione 1: verificare le proprietà della risorsa

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 usa PowerShell o l'interfaccia della riga di comando di Azure, verificare che i comandi vengano eseguiti 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. Azure Resource Manager consente di ottimizzare le distribuzioni creando risorse in parallelo, quando ciò è possibile.

Ad esempio, se si distribuisce un'app Web deve essere presente il piano di servizio app. 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 non è possibile trovare la risorsa del piano di servizio app perché ancora non esiste. È possibile prevenire questo errore impostando una dipendenza nell'app Web.

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

Ad esempio, la proprietà serverFarmId dell'app Web utilizza servicePlan.id per creare una dipendenza nel piano di servizio 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. Inoltre, si potrebbero creare dipendenze circolari che bloccano la distribuzione.

Ordine di distribuzione

In caso di problemi relativi alle dipendenze, è necessario esaminare in modo approfondito l'ordine di distribuzione delle risorse. Tramite il portale è possibile 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 of Azure portal highlighting the link to a resource group's deployment history in the Overview section.

  3. Per il Nome distribuzione che si desidera rivedere, selezionare Eventi correlati.

    Screenshot of Azure portal showing a deployment name with the Related events link highlighted in the deployment history.

  4. Esaminare la sequenza degli 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 distribuzioni dei tre account di archiviazione sono state avviate contemporaneamente.

    Screenshot of Azure portal activity log displaying three storage accounts deployed in parallel, with their timestamps and statuses.

    L'immagine successiva mostra tre account di archiviazione che non vengono distribuiti in parallelo. Il secondo account di archiviazione dipende dal primo e il terzo account di archiviazione dipende dal secondo. Al primo account di archiviazione viene associata l’etichetta Avviata, Accettatae Completata prima di avviare la successiva.

    Screenshot of Azure portal activity log displaying three storage accounts deployed in sequential order, with their timestamps and statuses.

Soluzione 3: ottenere una risorsa esterna

Bicep utilizza il nome simbolico per creare una dipendenza implicita su 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 si applica 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 entità di sicurezza e l'ID tenant per un'identità gestita, applicata a una macchina virtuale. Ad esempio, se una risorsa macchina virtuale ha come nome simbolico 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 i valori da una risorsa. Usando un nome simbolico, è possibile fare riferimento a un account di archiviazione nello stesso o in un altro gruppo di risorse. 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. Nella maggior parte dei casi, la funzione di riferimento non è necessaria.

L'esempio seguente fa riferimento a un account di archiviazione che si trova 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, essa potrebbe essere visualizzata nel portale per un breve periodo di tempo, pur non essendo disponibile. Se si seleziona la risorsa, verrà visualizzato un errore che indica Non trovata.

Screenshot of Azure portal showing a deleted resource with a 'Not found' error message in the resource's Overview section.

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