Resolva erros de modelo inválido

Este artigo descreve como resolver erros de modelo inválido para arquivos Bicep e modelos 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.

Causa

Esse erro pode resultar de vários tipos diferentes de erros. Normalmente, ele envolve um erro de sintaxe ou estrutural no modelo.

Solução 1: erro de sintaxe

Se você receber uma mensagem de erro que indica a validação do modelo falhou, você poderá ter um problema de sintaxe em seu 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 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, revise a sintaxe da expressão. Para identificar erros de modelo, use o Visual Studio Code com a versão mais recente da extensão do Bicep ou daextensão das ferramentas do Azure Resource Manager.

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, confira 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 fornecer um valor que não seja um valor permitido, você 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 os valores permitidos do parâmetro e use um valor permitido durante a implantação. Para saber mais, confira os valores permitidos para os modelos Bicep ou ARM.

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

Você pode observar 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 saber mais, confira como implantar vários grupos de recursos para modelos Bicep ou ARM.

Solução 5: dependência circular detectada

Você recebe esse erro quando recursos dependem entre si de uma maneira que impede que a implantação seja iniciado. Uma combinação de interdependências faz com que dois ou mais recursos aguardem outros recursos que também estão aguardando. Por exemplo, resource1 depende de resource3, resource2 depende de resource1 e resource3 depende de resource2. Geralmente 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 que use dependsOn normalmente não é necessária. Para saber mais, confira Dependências do Bicep.

Para resolver uma dependência circular:

  1. No modelo, localize o recurso identificado na dependência circular.
  2. Para esse recurso, examine a propriedade dependsOn e os tipos de uso das funções reference e resourceId para ver de quais recursos ela depende.
  3. Examine os recursos para ver quais recursos eles dependem. Siga as dependências até você perceber um recurso depende do recurso original.
  4. Para os recursos envolvidos na dependência circular, examine cuidadosamente todos os usos da propriedade dependsOn para identificar quaisquer dependências desnecessá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 em arquivos Bicep.
  5. Reimplante o modelo.

A remoção de valores da propriedade dependsOn pode causar erros quando você implanta 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 no modelo, remova os comentários para restaurar o código.

Se essa abordagem não resolver a dependência circular, considere mover parte de sua lógica de implantação para recursos filho (como extensões ou definições de configuração). Configure os 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 de serviço de aplicativo. Considere a mudança de valores de configuração em um recurso filho de recurso de aplicativo. Você pode implantar dois aplicativos web na seguinte ordem:

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

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

Depois de implantar recursos no Azure, você pode exportar o modelo JSON 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, do 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 links: