Início Rápido: solucionar problemas de implantações JSON do modelo do ARM

Este início rápido descreve como solucionar erros de implantação JSON de modelo do ARM (modelo do Azure Resource Manager). Você vai configurar um modelo com erros e aprender a corrigir esses erros.

Um Modelo do Azure Resource Manager é um arquivo JSON (JavaScript Object Notation) que define a infraestrutura e a configuração do seu projeto. O modelo usa a sintaxe declarativa. Você descreve a implantação pretendida sem escrever a sequência de comandos de programação para criar a implantação.

Há três tipos de erros relacionados a uma implantação:

  • Os erros de validação ocorrem antes do início de uma implantação e são causados por erros de sintaxe em seu arquivo. Um editor de código como Visual Studio Code pode identificar esses erros.
  • Erros de validação de simulação ocorrem quando um comando de implantação é executado, mas os recursos não são implantados. Esses erros são encontrados sem que seja necessário iniciar a implantação. Por exemplo, se um valor de parâmetro estiver incorreto, o erro será encontrado na validação de simulação.
  • Os erros de implantação ocorrem durante o processo de implantação e só podem ser encontrados por meio da avaliação do progresso da implantação no seu ambiente do Azure.

Todos os tipos de erros retornam um código de erro que você usa para solucionar problemas de implantação. Os erros de validação de simulação são mostrados no log de atividades, mas não aparecem no histórico de implantação.

Pré-requisitos

Para concluir este início rápido, você precisará dos seguintes itens:

Criar um modelo com erros

Copie o modelo a seguir e salve-o localmente. Você usará esse arquivo para solucionar um erro de validação, um erro de simulação e um erro de implantação. Este início rápido pressupõe que o arquivo tenha sido nomeado como troubleshoot.json, mas você pode usar qualquer nome.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameterss": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    },
    "vnetResult": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
    }
  }
}

Corrigir erro de validação

Abra o arquivo no Visual Studio Code. A linha ondulada embaixo de parameterss: indica um erro. Para ver o erro de validação, passe o mouse sobre ele.

Screenshot of Visual Studio Code highlighting a template validation error with a red wavy line under the misspelled 'parameterss:' in the code.

Você observará que variables e resources têm erros para referência de parâmetro indefinido. Para exibir os erros de validação do modelo, selecione Exibir>Problemas.

Screenshot of Visual Studio Code showing the Problems tab listing undefined parameter reference errors for 'variables' and 'resources' sections.

Todos os erros são causados pela ortografia incorreta do nome de um elemento.

"parameterss": {

A mensagem de erro informa: Falha na validação do modelo: não foi possível encontrar o membro 'parameterss' no objeto do tipo 'Template'. Caminho 'parameterss', linha 4, posição 16.

A sintaxe de modelo do ARM para parâmetros mostra que parameters é o nome correto do elemento.

Para corrigir o erro de validação e os erros de referência de parâmetro indefinido, corrija a ortografia e salve o arquivo.

"parameters": {

Corrigir erro de simulação

Para criar um erro de validação de simulação, você usará um valor incorreto para o parâmetro prefixName.

Este início rápido usa troubleshootRG para o nome do grupo de recursos, mas você pode usar qualquer nome.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=long!!StoragePrefix

O modelo falha na validação de simulação e a implantação não é executada. O prefixName tem mais de 11 caracteres e contém caracteres especiais e letras maiúsculas.

Os nomes de armazenamento precisam ter entre 3 e 24 caracteres e usar apenas letras minúsculas e números. O valor do prefixo criou um nome de armazenamento inválido. Para obter mais informações, consulte Solucionar erros de nomes de conta de armazenamento. Para corrigir o erro de simulação, use um prefixo que tenha 11 caracteres ou menos e contenha apenas letras minúsculas ou números.

Como a implantação não foi executada, não há nenhum histórico de implantação.

Screenshot of Azure resource group overview page displaying an empty deployment history section due to a preflight error.

O log de atividades mostra o erro de simulação. Selecione o log para ver os detalhes do erro.

Screenshot of Azure resource group activity log showing a preflight error entry with a red exclamation mark icon.

Corrigir erro de implantação

Execute a implantação com um valor de prefixo válido, como storage.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=storage

A implantação começa e fica visível no histórico de implantação. A implantação falha porque outputs faz referência a uma rede virtual que não existe no grupo de recursos. No entanto, não houve erros na conta de armazenamento, portanto o recurso foi implantado. O histórico de implantação mostra uma implantação com falha.

Screenshot of Azure resource group overview page showing a failed deployment with a red exclamation mark icon in the deployment history section.

Para corrigir o erro de implantação, altere a função de referência para usar um recurso válido. Para obter mais informações, confira Solucionar erros de recurso não encontrado. Para este início rápido, exclua a vírgula que precede vnetResult e todo o vnetResult. Salve o arquivo e execute a implantação novamente.

"vnetResult": {
  "type": "object",
  "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}

Depois que os erros de validação, simulação e implantação forem corrigidos, o modelo a seguir implantará uma conta de armazenamento. O histórico de implantação e o log de atividades mostram uma implantação bem-sucedida.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Limpar os recursos

Quando os recursos do Azure não forem mais necessários, exclua o grupo de recursos.

az group delete --name troubleshootRG

Para excluir o grupo de recursos do portal, siga estas etapas:

  1. Na portal do Azure, insira Grupos de recursos na caixa de pesquisa.
  2. No campo Filtrar por nome, insira o nome do grupo de recursos.
  3. Selecione o nome do grupo de recursos.
  4. Selecione Excluir grupo de recursos.
  5. Para confirmar a exclusão, insira o nome do grupo recursos e selecione Excluir.

Próximas etapas

Neste início rápido, você aprendeu a solucionar erros de implantação de modelo do ARM.