Resolver erros de incompatibilidade de nome e tipo de recurso
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 implantar um modelo, você recebe um erro com o código de erro InvalidTemplate
. A mensagem indica que o tipo de recurso e o nome não correspondem. Ele sugere corrigir o número de segmentos no nome.
Causa
Um tipo de recurso contém o namespace do provedor 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 deve corresponder ao número no tipo de recurso.
{name-segment-1}/{name-segment-2}
Se o tipo de recurso e o nome contêm um número diferente de segmentos, você recebe esse erro.
Solução
Certifique-se de entender o nível do tipo de recurso. Por exemplo, um recurso do cofre de chaves tem um tipo de recurso totalmente qualificado de Microsoft.KeyVault/vaults
. Você pode ignorar o namespace do provedor de recursos (Microsoft.KeyVault) e se concentrar no tipo (vaults). Ele tem um segmento.
Um segredo do cofre de chaves é um recurso filho do cofre. Ele tem um tipo de recurso totalmente qualificado de Microsoft.KeyVault/vaults/secrets
. Esse tipo de recurso tem dois segmentos (vaults/secrets).
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 em que esse segredo está armazenado.
O exemplo a seguir mostra um formato válido para o nome do recurso.
Você verá um erro se tiver fornecido um nome com mais de um segmento.
resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: 'contoso/examplevault123'
...
}
Ao aninhar um recurso filho dentro do recurso pai, forneça apenas o segmento extra. O tipo de recurso completo e o nome ainda contêm os valores do recurso pai, mas eles são construídos para você. No exemplo a seguir, 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
}
}
}
Ao definir o recurso filho fora do pai, forneça o tipo de recurso completo. Para JSON, forneça o nome completo do recurso.
Para Bicep, use a propriedade parent
e forneça o nome simbólico do recurso pai. Quando você usa a propriedade pai, o nome completo é construído para você, portanto, você fornece o nome do recurso filho 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, consulte Definir nome e tipo para recursos filho no Bicep ou Definir nome e tipo para recursos filho nos modelos do ARM.