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

Questo articolo descrive come risolvere l'errore relativo alla mancata corrispondenza tra il formato del nome e del tipo della risorsa.

Sintomo

Quando si distribuisce un modello, viene visualizzato un errore con il codice errore InvalidTemplate. Il messaggio indica che il tipo e il nome della risorsa non corrispondono. Si suggerisce di correggere il numero di segmenti del 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 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 barra. Il numero di segmenti deve corrispondere al numero nel tipo di risorsa.

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

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

Soluzione

Assicurarsi di riconoscere il livello del tipo di risorsa. Ad esempio, una risorsa dell'insieme di credenziali delle chiavi ha un tipo di risorsa completo Microsoft.KeyVault/vaults. Si può 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 indicare 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 il segreto.

Nell'esempio seguente è indicato 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 nella risorsa padre, specificare solo il segmento aggiuntivo. Il nome e il tipo di risorsa completo contengono comunque i valori della risorsa padre, ma vengono costruiti 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 al di fuori dell'elemento padre, specificare il tipo di risorsa completo. Per JSON, specificare il nome completo della risorsa.

Per Bicep, usare la proprietà parent 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 segmento singolo.

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 di risorse figlio in Bicep o Impostare il nome e il tipo di risorse figlio nei modelli di ARM.