Compartilhar via


Resolver erros para modelo inválido

Este artigo descreve como resolver erros de modelo inválidos para arquivos Bicep e modelos do ARM (Azure Resource Manager). 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

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

Solução 1: erro de sintaxe

Se você receber uma mensagem de erro indicando que o modelo falhou na validação, talvez haja um problema de sintaxe no 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, 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 você receber esse tipo de erro, examine 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 de 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 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 para obter 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: muitos 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 detectada

Você recebe esse erro quando os recursos dependem uns dos outros de uma forma que impede o início da implantação. 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 Bicep 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 Bicep.

Para resolver uma dependência circular:

  1. Em seu modelo, localize o recurso identificado na dependência circular.
  2. Para esse recurso, examine a dependsOn propriedade e quaisquer usos das reference funções or resourceId para ver de quais recursos ele depende.
  3. Examine esses recursos para ver de quais recursos eles dependem. Siga as dependências até notar 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 as dependências que não são 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 do 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, poderá 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ê estiver implantando duas máquinas virtuais, mas você deve definir propriedades em cada um deles que se referem a outro. Você pode implantá-los na seguinte ordem:

  1. vm1
  2. VM2
  3. Extensão na vm1 depende vm1 e vm2. A extensão define valores na vm1 que ele obtém da vm2.
  4. Extensão da vm2 depende vm1 e vm2. A extensão define valores de vm2 obtido do 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 do webapp1 depende do webapp1 e do webapp2. Ele contém configurações de 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 a sintaxe dos modelos exportados

Depois de implantar recursos no Azure, você pode exportar o JSON do modelo do ARM 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 do ARM, você pode descompilar o modelo JSON para o Bicep. Em seguida, use as práticas recomendadas e o linter para validar seu código.

Para obter mais informações, acesse os seguintes artigos: