Partilhar via


Resolver erros para modelo inválido

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

Sintoma

Quando um modelo é implantado, você recebe um erro que indica:

Code=InvalidTemplate
Message=<varies>

A mensagem de erro depende do tipo de erro.

Motivo

Este erro pode resultar de vários tipos diferentes de erros. Eles geralmente envolvem uma sintaxe ou erro estrutural no modelo.

Solução 1: Erro de sintaxe

Se você receber uma mensagem de erro que indica que o modelo falhou na validação, você pode ter um problema de sintaxe em seu modelo.

Code=InvalidTemplate
Message=Deployment template validation failed

Erros de sintaxe podem ocorrer porque as expressões de modelo têm muitos elementos. Por exemplo, a atribuição de nome para uma conta de armazenamento inclui pares de aspas simples ou duplas, chaves encaracoladas, colchetes e parênteses. As expressões também contêm funções e caracteres como cifrões, 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, você pode usar o Visual Studio Code com a extensão Bicep mais recente ou a extensão 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, consulte Resolver erros para incompatibilidade de nome e tipo.

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

Você pode especificar os valores permitidos de um parâmetro em um modelo. Durante a implantação, se você fornecer um valor que não é 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 no modelo os valores permitidos do parâmetro e use um valor permitido durante a implantação. Para obter mais informações, consulte Valores permitidos para modelosBicep ou ARM.

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

Você pode ver esse erro em implantações anteriores porque estava limitado a cinco grupos de recursos de destino em uma única implantação. Em maio de 2020, esse limite foi aumentado para 800 grupos de recursos. Para obter mais informações, consulte como implantar em vários grupos de recursos para modelos Bicep ou ARM.

Solução 5: Dependência circular detetada

Você recebe esse erro quando os recursos dependem uns dos outros de uma forma que impede que a implantação seja iniciada. Uma combinação de interdependências faz com que dois ou mais recursos esperem por outros recursos que também estão aguardando. Por exemplo, resource1 depende de resource3, resource2 depende de resource1, e resource3 depende de resource2. Normalmente, você pode resolver esse problema removendo dependências desnecessárias.

O bíceps cria uma dependência implícita quando um recurso usa o nome simbólico de outro recurso. Uma dependência explícita usando dependsOn geralmente não é necessária. Para obter mais informações, consulte Dependências do bíceps.

Para resolver uma dependência circular:

  1. No modelo, localize o recurso identificado na dependência circular.
  2. Para esse recurso, examine a dependsOn propriedade e quaisquer usos das reference funções ou resourceId para ver de quais recursos ele depende.
  3. Examine esses recursos para ver de quais recursos eles dependem. Siga as dependências até perceber um recurso que depende do recurso original.
  4. Para os recursos envolvidos na dependência circular, examine cuidadosamente todos os usos da dependsOn propriedade para identificar quaisquer dependências que não sejam necessárias. Para solucionar problemas de implantação, remova as dependências circulares. Em vez de excluir o código, você pode usar comentários para que o código não seja executado durante a próxima implantação. Você pode usar comentários de linha única (//) ou comentários de várias linhas (/* ... */) em modelos ARM ou arquivos Bicep .
  5. Reimplante o modelo.

A remoção de valores da dependsOn propriedade pode causar erros ao implantar o modelo. Se você receber um erro, adicione a dependência de volta ao modelo. Se você usou comentários para ignorar o código em seu modelo, você 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 implantação para recursos filho (como extensões ou definições de configuração). Configure esses recursos filho para implantar após os recursos envolvidos na dependência circular. Por exemplo, suponha que você esteja implantando duas máquinas virtuais, mas deve definir propriedades em cada uma que se referem à outra. Você pode implantá-los na seguinte ordem:

  1. VM1
  2. VM2
  3. A extensão em vm1 depende de vm1 e vm2. A extensão define valores em vm1 que obtém de vm2.
  4. A extensão em vm2 depende de vm1 e vm2. A extensão define valores em vm2 que obtém de vm1.

A mesma abordagem funciona para aplicativos do Serviço de Aplicativo. Considere mover valores de configuração para um recurso filho do recurso do aplicativo. Você pode implantar dois aplicativos Web na seguinte ordem:

  1. WebApp1
  2. WebApp2
  3. A configuração para webapp1 depende de webapp1 e webapp2. Ele contém configurações do aplicativo com valores de webapp2.
  4. A configuração para webapp2 depende de webapp1 e webapp2. Ele contém configurações de aplicativo com valores de webapp1.

Solução 6: Validar sintaxe para modelos exportados

Depois de implantar recursos no Azure, você pode exportar o modelo ARM JSON e modificá-lo para outras implantações. Você deve validar o modelo exportado para obter a sintaxe correta antes de usá-lo para implantar recursos.

Você pode exportar um modelo do portal, da CLI do Azure ou do Azure PowerShell. Há recomendações se você exportou o modelo do recurso ou grupo de recursos ou do histórico de implantação.

Depois de exportar um modelo ARM, você pode descompilar o modelo JSON para Bicep. Em seguida, use as práticas recomendadas e o linter para validar seu código.

Para mais informações, consulte os seguintes artigos: