Condividi tramite


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.

Motivo

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 delle 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 di un insieme di credenziali per le chiavi ha un tipo di risorsa del tutto qualificato 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 del vault delle credenziali è una risorsa figlia del vault. Ha un tipo di risorsa completamente qualificato di Microsoft.KeyVault/vaults/secrets. Questo tipo di risorsa ha due segmenti (insiemi di credenziali/segreti).

Per specificare un nome per il vault di chiavi, fornire un solo segmento, ad esempio examplevault123. Per specificare un nome per il segreto, specificare due segmenti, ad esempio examplevault123/examplesecret. Il primo segmento indica il deposito di chiavi in cui è archiviato il segreto.

L'esempio seguente mostra 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ù segmenti, verrà visualizzato un errore .

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

Quando si annida una risorsa secondaria all'interno della risorsa principale, specificare solo il segmento aggiunto. Il tipo e il nome completi della risorsa continuano a includere i valori dalla risorsa padre, ma sono costruiti appositamente per voi. 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, quindi si specifica il nome della risorsa figlio come 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 in ARM templates.