Resolver erros de erro de correspondência entre o nome do recurso e o tipo

Este artigo descreve como resolver o erro quando o formato do nome do recurso não corresponde ao formato do tipo de recurso.

Sintoma

Ao implementar um modelo, recebe um erro com o código InvalidTemplatede erro . A mensagem indica que o tipo de recurso e o nome não correspondem. Sugere corrigir o número de segmentos no nome.

Causa

Um tipo de recurso contém o espaço de nomes do fornecedor de recursos e um ou mais segmentos para tipos. Cada segmento representa um nível na hierarquia de recursos e é separado por uma barra.

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

O nome do recurso contém um ou mais segmentos separados por barras. O número de segmentos tem de corresponder ao número no tipo de recurso.

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

Se o tipo de recurso e o nome contiverem um número diferente de segmentos, obtém este erro.

Solução

Certifique-se de que compreende o nível do tipo de recurso. Por exemplo, um recurso do cofre de chaves tem um tipo de recurso completamente qualificado de Microsoft.KeyVault/vaults. Pode ignorar o espaço de nomes do fornecedor de recursos (Microsoft.KeyVault) e focar-se no tipo (cofres). Tem um segmento.

Um segredo do cofre de chaves é um recurso subordinado do cofre. Tem um tipo de recurso completamente qualificado de Microsoft.KeyVault/vaults/secrets. Este tipo de recurso tem dois segmentos (cofres/segredos).

Para especificar um nome para o cofre de chaves, forneça apenas um segmento, como examplevault123. Para especificar um nome para o segredo, forneça dois segmentos, como examplevault123/examplesecret. O primeiro segmento indica o cofre de chaves onde este segredo está armazenado.

O exemplo seguinte mostra um formato válido para o nome do recurso.

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

Verá um erro se fornecesse um nome com mais do que um segmento.

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

Quando aninha um recurso subordinado no recurso principal, forneça apenas o segmento extra. O tipo de recurso completo e o nome ainda contêm os valores do recurso principal, mas são construídos para si. No exemplo seguinte, o tipo é secrets e o nome é examplesecret.

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

Quando definir o recurso subordinado fora do principal, forneça o tipo de recurso completo. Para JSON, indique o nome completo do recurso.

Para Bicep, utilize a parent propriedade e forneça o nome simbólico do recurso principal. Quando utiliza a propriedade principal, o nome completo é construído automaticmente, pelo que fornece o nome do recurso subordinado como um ú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 obter mais informações, veja Definir nome e tipo para recursos subordinados no Bicep ou Definir nome e tipo para recursos subordinados em modelos arm.