Risolvere gli errori relativi al nome della risorsa e alla mancata corrispondenza del tipo

Questo articolo descrive come risolvere l'errore quando il formato del nome della risorsa non corrisponde al formato del tipo di risorsa.

Sintomo

Quando si distribuisce un modello, viene visualizzato un errore con il codice InvalidTemplatedi errore . Il messaggio indica che il tipo di risorsa e il nome non corrispondono. Suggerisce di correggere il numero di segmenti nel nome.

Causa

Un tipo di risorsa contiene lo spazio dei nomi del provider di risorse e uno o più segmenti per i tipi. Ogni segmento rappresenta un livello nella gerarchia di risorse ed è separato da una barra.

{resource-provider-namespace}/{type-segment-1}/{type-segment-2}

Il nome della risorsa contiene uno o più segmenti separati da barre. Il numero di segmenti deve corrispondere al numero nel tipo di risorsa.

{name-segment-1}/{name-segment-2}

Se il tipo di risorsa e il nome contengono un numero diverso di segmenti, viene visualizzato questo errore.

Soluzione

Assicurarsi di comprendere il livello del tipo di risorsa. Ad esempio, una risorsa dell'insieme di credenziali delle chiavi ha un tipo di risorsa completo di Microsoft.KeyVault/vaults. È possibile ignorare lo spazio dei nomi del provider di risorse (Microsoft.KeyVault) e concentrarsi sul tipo (insiemi di credenziali). Ha un segmento.

Un segreto dell'insieme di credenziali delle chiavi è una risorsa figlio dell'insieme di credenziali. Ha un tipo di risorsa completo di Microsoft.KeyVault/vaults/secrets. Questo tipo di risorsa ha due segmenti (insiemi di credenziali/segreti).

Per specificare un nome per l'insieme di credenziali delle chiavi, specificare un solo segmento, ad esempio examplevault123. Per specificare un nome per il segreto, specificare due segmenti, ad esempio examplevault123/examplesecret. Il primo segmento indica l'insieme di credenziali delle chiavi in cui è archiviato questo segreto.

Nell'esempio seguente viene illustrato un formato valido per il nome della risorsa.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
}

Se si specifica un nome con più di un segmento, verrà visualizzato un errore .

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'contoso/examplevault123'
  ...
}

Quando si annida una risorsa figlio all'interno della risorsa padre, specificare solo il segmento aggiuntivo. Il tipo di risorsa completo e il nome contengono comunque i valori della risorsa padre, ma vengono creati automaticamente. Nell'esempio seguente il tipo è secrets e il nome è examplesecret.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
  resource kvsecret 'secrets' = {
    name: 'examplesecret'
    properties: {
     value: secretValue
    }
  }
}

Quando si definisce la risorsa figlio all'esterno dell'elemento padre, specificare il tipo di risorsa completo. Per JSON specificare il nome completo della risorsa.

Per Bicep, usare la parent proprietà e specificare il nome simbolico della risorsa padre. Quando si usa la proprietà padre, il nome completo viene costruito automaticamente, in modo da specificare il nome della risorsa figlio come un singolo segmento.

resource kvsecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = {
  name: 'examplesecret'
  parent: kv
  properties: {
     value: secretValue
  }
}

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
}

Per altre informazioni, vedere Impostare il nome e il tipo per le risorse figlio in Bicep o Impostare il nome e il tipo per le risorse figlio nei modelli di Resource Manager.