Partage via


Résoudre les erreurs liées à la non-concordance du nom et du type de la ressource

Cet article explique comment résoudre l’erreur lorsque le format du nom de ressource ne correspond pas à celui du type de ressource.

Symptôme

Lors du déploiement d’un modèle, vous recevez une erreur avec le code d’erreur InvalidTemplate. Le message indique que le type et le nom de la ressource ne correspondent pas. Il suggère de corriger le nombre de segments dans le nom.

Cause

Un type de ressource contient l’espace de noms du fournisseur de ressources et un ou plusieurs segments pour les types. Chaque segment représente un niveau dans la hiérarchie des ressources et est séparé par une barre oblique.

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

Le nom de la ressource contient un ou plusieurs segments séparés par des barres obliques. Le nombre de segments doit correspondre au nombre dans le type de ressource.

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

Si le type et le nom de la ressource contiennent un nombre différent de segments, vous obtenez cette erreur.

Solution

Assurez-vous de bien comprendre le niveau du type de ressource. Par exemple, une ressource de coffre de clés a un type de ressource complet Microsoft.KeyVault/vaults. Vous pouvez ignorer l’espace de noms du fournisseur de ressources (Microsoft.KeyVault) et vous concentrer sur le type (vaults). Elle possède un segment.

Un secret de coffre de clés est une ressource enfant du coffre. Son type de ressource complet est Microsoft.KeyVault/vaults/secrets. Ce type de ressource a deux segments (vaults/secrets).

Pour spécifier un nom pour le coffre de clés, fournissez un seul segment, par exemple examplevault123. Pour spécifier un nom pour le secret, fournissez deux segments, par exemple examplevault123/examplesecret. Le premier segment indique le coffre de clés dans lequel ce secret est stocké.

L’exemple suivant montre un format valide pour le nom de la ressource.

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

Une erreur s’affiche si vous avez fourni un nom avec plusieurs segments.

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

Lorsque vous imbriquez une ressource enfant dans la ressource parente, fournissez simplement le segment supplémentaire. Le type et le nom complets de la ressource contiennent toujours les valeurs de la ressource parente, mais ils sont construits pour vous. Dans l’exemple suivant, le type est secrets et le nom est examplesecret.

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

Lorsque vous définissez la ressource enfant en dehors du parent, fournissez le type de ressource complet. Pour JSON, indiquez le nom complet de la ressource.

Pour Bicep, utilisez la propriété parent et fournissez le nom symbolique de la ressource parente. Lorsque vous utilisez la propriété parent, le nom complet est construit pour vous, vous devez donc fournir le nom de la ressource enfant sous la forme d’un segment unique.

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'
  ...
}

Pour plus d’informations, consultez Définir le nom et le type des ressources enfants dans Bicep ou Définir le nom et le type des ressources enfants dans les modèles ARM.