Partilhar via


Resolver erros de modelo inválido

Este artigo descreve como resolver erros de modelo inválidos para ficheiros Bicep e modelos de Resource Manager do Azure (modelos do ARM). O erro ocorre por vários motivos, como um erro de sintaxe, um valor de parâmetro inválido ou uma dependência circular.

Sintoma

Quando um modelo é implementado, recebe um erro que indica:

Code=InvalidTemplate
Message=<varies>

A mensagem de erro depende do tipo de erro.

Causa

Este erro pode resultar de vários tipos de erros diferentes. Normalmente, envolvem uma sintaxe ou um erro estrutural no modelo.

Solução 1: Erro de sintaxe

Se receber uma mensagem de erro que indica que o modelo falhou na validação, poderá ter um problema de sintaxe no modelo.

Code=InvalidTemplate
Message=Deployment template validation failed

Podem ocorrer erros de sintaxe porque as expressões de modelo têm muitos elementos. Por exemplo, a atribuição de nomes de uma conta de armazenamento inclui pares de aspas individuais ou duplas, chavetas, parênteses retos e parênteses. As expressões também contêm funções e carateres como sinais de dólar, vírgulas e pontos.

name: 'storage${uniqueString(resourceGroup().id)}'

Quando receber este tipo de erro, reveja a sintaxe da expressão. Para identificar erros de modelo, pode utilizar o Visual Studio Code com a extensão mais recente do Bicep ou a extensão do Azure Resource Manager Tools.

Solução 2: Comprimentos de segmento incorretos

Outro erro de modelo inválido ocorre quando o nome do recurso não está no formato correto. Para resolver esse erro, veja Resolver erros de erro de nome e de tipo.

Solução 3: o parâmetro não é válido

Pode especificar os valores permitidos de um parâmetro num modelo. Durante a implementação, se fornecer um valor que não seja um valor permitido, receberá uma mensagem semelhante ao seguinte erro:

Code=InvalidTemplate;
Message=Deployment template validation failed: 'The provided value {parameter value}
for the template parameter {parameter name} is not valid. The parameter value is not
part of the allowed values

Verifique o modelo dos valores permitidos do parâmetro e utilize um valor permitido durante a implementação. Para obter mais informações, veja valores permitidos para modelosbicep ou ARM.

Solução 4: Demasiados grupos de recursos de destino

Poderá ver este erro em implementações anteriores porque estava limitado a cinco grupos de recursos de destino numa única implementação. Em maio de 2020, esse limite foi aumentado para 800 grupos de recursos. Para obter mais informações, veja como implementar em vários grupos de recursos para modelosbicep ou ARM.

Solução 5: Dependência circular detetada

Recebe este erro quando os recursos dependem uns dos outros de uma forma que impede o início da implementação. Uma combinação de interdependências faz com que dois ou mais recursos aguardem por outros recursos que também estão à espera. Por exemplo, resource1 depende resource3de , resource2 depende resource1de e resource3 depende de resource2. Normalmente, pode resolver este problema ao remover dependências desnecessárias.

O Bicep cria uma dependência implícita quando um recurso utiliza o nome simbólico de outro recurso. Normalmente, não é necessária uma dependência explícita que utilize dependsOn . Para obter mais informações, veja Dependências do Bicep.

Para resolver uma dependência circular:

  1. No seu modelo, localize o recurso identificado na dependência circular.
  2. Para esse recurso, examine a dependsOn propriedade e quaisquer utilizações das reference funções ou resourceId para ver de que recursos depende.
  3. Examine esses recursos para ver de que recursos dependem. Siga as dependências até reparar num recurso que depende do recurso original.
  4. Para os recursos envolvidos na dependência circular, examine cuidadosamente todas as utilizações da dependsOn propriedade para identificar quaisquer dependências que não sejam necessárias. Para resolver problemas de implementação, remova as dependências circulares. Em vez de eliminar o código, pode utilizar comentários para que o código não seja executado durante a próxima implementação. Pode utilizar comentários de linha única (//) ou comentários de várias linhas (/* ... */) em modelos arm ou ficheirosBicep .
  5. Reimplementar o modelo.

Remover valores da dependsOn propriedade pode causar erros ao implementar o modelo. Se receber um erro, adicione novamente a dependência ao modelo. Se utilizou comentários para ignorar o código no seu modelo, pode remover os comentários para restaurar o código.

Se essa abordagem não resolver a dependência circular, considere mover parte da lógica de implementação para recursos subordinados (como extensões ou definições de configuração). Configure esses recursos subordinados para implementar após os recursos envolvidos na dependência circular. Por exemplo, suponha que está a implementar duas máquinas virtuais, mas tem de definir propriedades em cada uma que se refira à outra. Pode implementá-los pela seguinte ordem:

  1. vm1
  2. vm2
  3. A extensão na vm1 depende da vm1 e da vm2. A extensão define os valores na vm1 que obtém da vm2.
  4. A extensão na vm2 depende da vm1 e da vm2. A extensão define os valores na vm2 que obtém da vm1.

A mesma abordagem funciona para Serviço de Aplicações aplicações. Considere mover valores de configuração para um recurso subordinado do recurso da aplicação. Pode implementar duas aplicações Web pela seguinte ordem:

  1. webapp1
  2. webapp2
  3. A configuração da aplicação Web1 depende da aplicação Web1 e webapp2. Contém definições de aplicações com valores da webapp2.
  4. A configuração da aplicação Web2 depende da aplicação Web1 e webapp2. Contém definições de aplicações com valores da webapp1.

Solução 6: Validar a sintaxe para modelos exportados

Depois de implementar recursos no Azure, pode exportar o modelo do ARM JSON e modificá-lo para outras implementações. Deve validar o modelo exportado para a sintaxe correta antes de o utilizar para implementar recursos.

Pode exportar um modelo a partir do portal, da CLI do Azure ou Azure PowerShell. Existem recomendações quer tenha exportado o modelo a partir do recurso ou grupo de recursos ou do histórico de implementações.

Depois de exportar um modelo do ARM, pode decompilar o modelo JSON para Bicep. Em seguida, utilize as melhores práticas e o linter para validar o seu código.

Para obter mais informações, aceda aos seguintes artigos: