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 InvalidTemplate
de 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.
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.