Compartir a través de


Resolución de errores de coincidencia entre el nombre y el tipo del recurso

En este artículo se describe cómo resolver el error cuando el formato del nombre del recurso no coincide con el formato del tipo de recurso.

Síntoma

Al implementar una plantilla, recibirá un error con el código de error InvalidTemplate. El mensaje indica el tipo de recurso y el nombre no coinciden. Sugiere corregir el número de segmentos en el nombre.

Causa

Un tipo de recurso contiene el espacio de nombres del proveedor de recursos y uno o varios segmentos para los tipos. Cada segmento representa un nivel en la jerarquía de recursos y está separado por una barra diagonal.

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

El nombre del recurso contiene uno o varios segmentos separados por barras diagonales. El número de segmentos debe coincidir con el número del tipo de recurso.

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

Si el tipo de recurso y el nombre contienen un número diferente de segmentos, obtendrá este error.

Solución

Asegúrese de comprender el nivel del tipo de recurso. Por ejemplo, un recurso de almacén de claves tiene un tipo de recurso completo de Microsoft.KeyVault/vaults. Puede omitir el espacio de nombres del proveedor de recursos (Microsoft.KeyVault) y centrarse en el tipo (almacenes). Tiene un segmento.

Un secreto del almacén de claves es un recurso secundario del almacén. Tiene un tipo de recurso completo de Microsoft.KeyVault/vaults/secrets. Este tipo de recurso tiene dos segmentos (almacenes o secretos).

Para especificar un nombre para la bóveda de claves, proporcione solo un segmento, como examplevault123. Para especificar un nombre para el secreto, proporcione dos segmentos, como examplevault123/examplesecret. El primer segmento indica la bóveda de claves donde se almacena este secreto.

En el ejemplo siguiente se muestra un formato válido para el nombre del recurso.

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

Verá un error si proporcionó un nombre con más de un segmento.

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

Cuando anide un recurso secundario dentro del recurso primario, proporcione solo el segmento adicional. El tipo de recurso completo y el nombre todavía contienen los valores del recurso padre, pero se construyen para usted. En el ejemplo siguiente, el tipo es secrets y el nombre es examplesecret.

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

Si define el recurso secundario fuera del elemento primario, proporcione el tipo de recurso completo. En JSON, proporcione el nombre completo del recurso.

Para Bicep, use la parent propiedad y proporcione el nombre simbólico del recurso primario. Cuando se usa la propiedad primaria, el nombre completo se construye automáticamente, por lo que puede proporcionar el nombre del recurso secundario como un único 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'
  ...
}

Para obtener más información, consulte Establecer el nombre y el tipo de recursos secundarios en Bicep o Establecer nombre y tipo para recursos secundarios en plantillas de ARM.