Condividi tramite


Risolvere gli errori per le risorse principali

Questo articolo descrive l'errore ParentResourceNotFound che potrebbe verificarsi durante la distribuzione di una risorsa dipendente da una risorsa padre. L'errore si verifica quando si distribuiscono risorse con un file Bicep o un modello di Azure Resource Manager (modello arm).

Sintomo

Quando si distribuisce una risorsa subordinata in un'altra risorsa, è possibile che venga visualizzato il seguente errore:

Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."

Motivo

Quando una risorsa è figlio di un'altra risorsa, la risorsa padre deve esistere prima della creazione della risorsa figlio. Il nome della risorsa figlio definisce la connessione con la risorsa padre. Il nome della risorsa figlio è nel formato <parent-resource-name>/<child-resource-name>. Ad esempio, un database SQL può essere definito come:

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  name: '${sqlServerName}/${databaseName}'
  ...
}

Per ulteriori informazioni sulle risorse padre e figlio di Bicep, vedere Impostare il nome e il tipo per le risorse figlio di Bicep.

Se si distribuiscono il server e il database nello stesso modello, ma non si specifica una dipendenza dal server, la distribuzione del database potrebbe essere avviata prima della distribuzione del server. Ciò causa il fallimento della distribuzione del database con l'errore ParentResourceNotFound.

Se la risorsa padre esiste già e non è distribuita nello stesso modello, viene visualizzato l'errore ParentResourceNotFound quando Resource Manager non può associare la risorsa figlio a un elemento padre. Questo errore può verificarsi quando la risorsa figlia non è nel formato corretto. In alternativa, se la risorsa figlio viene distribuita in un gruppo di risorse diverso dal gruppo di risorse per la risorsa padre.

Soluzione 1: Distribuita nello stesso modello

Per risolvere questo errore quando le risorse padre e figlio vengono distribuite nello stesso modello, usare una dipendenza.

Questo esempio usa una risorsa figlio annidata all'interno della risorsa padre e che crea la dipendenza. La risorsa figlia ottiene il tipo di risorsa e la versione dell'API dalla risorsa padre.

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
  name: sqlServerName
  properties: {
    ...
  }
  resource sqlDatabase 'databases' = {
    name: databaseName
    ...
  }
}

Per altre informazioni sulle dipendenze, vedere Dichiarazione di risorsa in Bicep.

Soluzione 2: Distribuita in modelli diversi

Per risolvere questo errore quando la risorsa principale è stata distribuita in un modello di template diverso, non impostare una dipendenza. Distribuire al contrario la risorsa figlia nello stesso gruppo di risorse e specificare il nome della risorsa padre.

In questo esempio viene usata la parola chiave esistente per fare riferimento a un elemento padre distribuito in un file separato. La risorsa figlio utilizza l'elemento parent e il nome simbolico della risorsa padre.

param location string = resourceGroup().location
param sqlServerName string
param databaseName string

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' existing = {
  name: sqlServerName
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  parent: sqlServer
  name: databaseName
  location: location
}